精华内容
下载资源
问答
  • LTE 安全功能 1 目 录 2 3 1 概述 本文档对 LTE 安全技术进行的总结描述了与安全相关的协议重点包括安全流程梳理 1.1 参考文献 [1] 3GPP TS 33.401"3GPP System Architecture Evolution (SAE; Security architecture...
  • 为什么需要使用配置中心常用的配置管理解决方案有哪些缺点?答:配置管理解决方案的缺点:硬编码(缺点:需要修改代码、繁琐、风险大)写在properties文件里面(缺点:在集群环境下,需要替换和重启)写在xml配置...

    为什么需要使用配置中心

    常用的配置管理解决方案有哪些缺点?

    答:配置管理解决方案的缺点:

    硬编码(缺点:需要修改代码、繁琐、风险大)

    写在properties文件里面(缺点:在集群环境下,需要替换和重启)

    写在xml配置文件中,一般和应用一起打包(缺点:需要重新打包和重启)

    为什么要使用Spring Cloud Config 配置中心?

    答:由于常用的配置管理有很大的缺点,故spring cloud采用了集中式的配置中心来管理每个服务的配置信息。Spring cloud config配置中心,在微服务分布式系统中,采用服务端和客户端来提供可扩展的配置服务。配置中心负责管理所有的服务的各种环境配置文件。配置服务中心默认采用了Git的方式存储配置文件,因此我们很容易部署修改,有助于对环境配置进行版本管理。

    Spring Cloud Config 配置中心解决了什么问题?

    答:spring cloud config解决了微服务配置的中心化、版本控制、平台独立、语言独立等问题。

    其特性如下:

    提供服务端和客户端支持(spring cloud config server和spring cloud config client)

    集中式管理分布环境下的应用配置

    基于spring环境,无缝与spring应用集成

    可用于任何语言开发的程序

    默认实现基于git仓库,可以进行版本管理

    配置文件的命名规则与访问规则

    @EnableConfigServer注解的作用是什么?

    答:@EnableConfigServer注解的作用是开启配置中心服务

    使用配置中心时,配置文件命名规则与访问规则是什么?

    13ce7d51d3b8f3610498bf9dc118ef5a.png

    访问规则

    3afd8429b5ec2765f247ac5bcec32335.png

    编写配置中心客户端

    配置中心客户端中的配置文件命名有什么要求?

    答:配置中心客户端的配置文件名称必须为bootstrap.properties.

    配置中心原理讲解

    配置中心的原理是什么?

    答:配置中心的原理

    当开发人员修改远程仓库中的数据时,自动同步到本地仓库中,当客户端进行访问服务的时候,服务到本地仓库中拿取数据,保证客户端得到的数据与远程仓库中的数据保存一致。

    在git端修改配置后,在不重启服务中如何让客户端生效

    @RefreshScope注解的作用是什么?

    答:@RefreshScope注解的作用是刷新作用域

    加密&bus

    在配置中心服务端开启对称加密

    什么是对称加密?

    答:对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的钥匙

    设置加密环境需要哪些步骤?

    答:设置加密环境步骤:

    设置密钥key.如:encrypt=admin

    配置JCE

    JDK:将两个 jar 文件放到%JDK_HOME%jrelibsecurity 下

    JRE:将两个 jar 文件放到%JRE_HOME%libsecurity 下

    客户端服务通过服务端获取加密后的配置信息

    创建配置中心客户端。

    修改POM文件,添加相关坐标。

    修改POM文件,添加配置中心客户端坐标。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.bjsxt</groupId>
        <artifactId>25config-client</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>25config-client</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    修改配置文件,添加服务相关配置。

    修改配置文件,添加配置中心相关配置。

    spring.application.name=gl-config-client
    server.port=9051
    
    #设置服务注册中心地址
    eureka.client.service-url.defaultZone=http://admin:1234@192.168.41.242:5050/eureka/,http://admin:1234@192.168.41.242:5051/eureka/
    
    #开启读取配置中心的配置,默认false
    spring.cloud.config.discovery.enabled=true
    #对应eureka中的配置中心serviceId,默认为configserver
    spring.cloud.config.discovery.service-id=gl-config-server
    #指定环境
    spring.cloud.config.profile=dev
    #git标签
    spring.cloud.config.label=master

    测试通过访问配置中心客户端获取配置内容。

    什么是非对称加密

    什么是非对称加密

    答:非对称加密是指加密和解密使用的是不同的两个密钥

    对称加密与非对称加密有何区别?

    答:对称加密算法在加密和解密过程时使用的是同一个密钥;非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥

    java-keytool证书-使用说明

    什么是java-keytool?

    如何使用java-keytool生成秘钥?

    keytool -genkey -alias "密钥别名" -keyalg "生成密钥的算法" -keystore "生成的密钥文件名称"

    ZooKeeper与Eureka的区别

    9d69e50d25263828ef4a933bf35aa440.png

    配置中心使用非对称加密算法对配置信息进行加密解密处理

    创建配置中心服务端。

    修改POM文件,添加相关坐标。

    修改POM文件,添加配置中心服务端坐标。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.bjsxt</groupId>
        <artifactId>26config-server-rsa</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>26config-server-rsa</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    修改配置文件,添加服务相关配置

    spring.application.name=gl-config-server-rsa
    server.port=9050
    
    #设置服务注册中心地址
    eureka.client.service-url.defaultZone=http://admin:1234@192.168.41.242:5050/eureka/,http://admin:1234@192.168.41.242:5051/eureka/
    
    #Git配置
    spring.cloud.config.server.git.uri=https://gitee.com/gl_baishu/config

    修改配置文件,添加秘钥相关配置。

    #非对称加密 RSA算法
    # keytool -genkey -alias "config-info" -keyalg "RSA" -keystore "encrypt-info.keystore"
    # keystore文件的路径
    encrypt.key-store.location=classpath:encrypt-info.keystore
    #alias指定密钥的别名,别名是公开的
    encrypt.key-store.alias=config-info
    #storepass 密钥仓库
    encrypt.key-store.password=123456
    #keypass 用来保护所生成密钥对中的私钥
    encrypt.key-store.secret=654321

    通过keytool工具创建密钥文件。

    4dcaa5dd5b5b235cd6e2a97c2a1c4c5e.png

    访问配置中心服务端测试结果。

    创建配置中心客户端。

    修改POM文件,添加相关坐标。

    修改POM文件,添加配置中心客户端坐标。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.bjsxt</groupId>
        <artifactId>26config-product-provider-rsa</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>26config-product-provider-rsa</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    修改配置文件,添加服务相关配置。

    修改配置文件,添加配置中心相关配置。

    spring.application.name=gl-config-product-provider-rsa
    server.port=9001
    
    #设置服务注册中心地址,指向另一个注册中心
    eureka.client.service-url.defaultZone=http://admin:1234@192.168.41.242:5050/eureka/,http://admin:1234@192.168.41.242:5051/eureka/
    
    #开启读取配置中心的配置,默认false
    spring.cloud.config.discovery.enabled=true
    #对应eureka中的配置中心serviceId,默认为configserver
    spring.cloud.config.discovery.service-id=gl-config-server-rsa
    #git标签
    spring.cloud.config.label=master

    使用httpUtilClient工具生成加密信息。

    在git的远程仓库中创建配置文件。

    测试配置中心服务端。

    访问客户端服务测试配置信息是否可用。

    配置中心的用户安全认证

    为什么需要开启配置中心的安全认证?

    答:不开启配置中心的安全认证的话,如果对方知道访问git的url路径,依然可以探寻到一些非公开信息,比如连接数据库的账号和密码。开启了配置中心的安全认证可以增加一层防护。

    什么是Spring Cloud Bus

    什么是Spring Cloud Bus?

    答:Spring Cloud Bus集成了市面上常用的消息代理(rabbitmq,kafka等),连接微服务系统中的所有节点,当有数据变更时,可以通过消息代理广播通知微服务及时变更数据;例如微服务的配置更新。

    采用bus实现自动刷新配置信息-Client刷新

    创建配置中心客户端项目。

    修改POM文件,添加相关坐标。

    修改POM文件,添加Bus amqp启动器坐标

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.bjsxt</groupId>
        <artifactId>25config-client</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>25config-client</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    修改配置文件,添加服务相关配置。

    修改配置文件,添加消息队列连接配置。

    spring.application.name=gl-config-client
    server.port=9051
    
    #设置服务注册中心地址
    eureka.client.service-url.defaultZone=http://admin:1234@192.168.41.242:5050/eureka/,http://admin:1234@192.168.41.242:5051/eureka/
    
    #开启读取配置中心的配置,默认false
    spring.cloud.config.discovery.enabled=true
    #对应eureka中的配置中心serviceId,默认为configserver
    spring.cloud.config.discovery.service-id=gl-config-server
    #指定环境
    spring.cloud.config.profile=dev
    #git标签
    spring.cloud.config.label=master
    
    management.endpoints.web.exposure.include=*
    
    #消息队列的连接配置
    spring.rabbitmq.host=192.168.170.128
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=admin
    spring.rabbitmq.password=admin
    spring.rabbitmq.virtual-host=/

    访问刷新服务URL,查看测试结果。

    采用bus实现自动刷新配置信息-Server刷新

    创建配置中心服务端项目。

    修改POM文件,添加相关坐标。

    修改POM文件,添加Bus amqp启动器坐标

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.bjsxt</groupId>
        <artifactId>25config-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>25config-server</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    修改配置文件,添加服务相关配置。

    修改配置文件,添加消息队列连接配置。

    spring.application.name=gl-config-server
    server.port=9050
    
    #设置服务注册中心地址
    eureka.client.service-url.defaultZone=http://admin:1234@192.168.41.242:5050/eureka/,http://admin:1234@192.168.41.242:5051/eureka/
    
    #Git配置
    spring.cloud.config.server.git.uri=https://gitee.com/gl_baishu/config
    #spring.cloud.config.server.git.username=
    #spring.cloud.config.server.git.password=
    
    #端点暴露
    management.endpoints.web.exposure.include=*
    
    #消息队列的连接配置
    spring.rabbitmq.host=192.168.170.128
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=admin
    spring.rabbitmq.password=admin
    spring.rabbitmq.virtual-host=/

    访问刷新服务URL,查看测试结果。

    展开全文
  • 对称加密算对称加密算法是加密和解密时使用相同的密钥,主要用于保证数据的机密性。最具有代表性的算法是20世纪70年代IBM公司提出的DES(dataencryption standard)算法;在此基础上...

    对称加密算

    对称加密算法是加密和解密时使用相同的密钥,主要用于保证数据的机密性。最具有代表性的算法是20世纪70年代IBM公司提出的DES(dataencryption standard)算法;在此基础上又提出了许多DES的改进算法,如三重DES(triple DES)、随机化DES(RDS)、IDEA(internationaldataencryptionalgorithm)、广义DES(generalizedDES)、NewDES、Blowfish、FEAL以及RC5等。2001年美国国家标准与技术研究院发布高级加密标准(advancedencryption standard,AES)取代了DES,成为对称密钥加密中最流行的算法之一。

    对称加密算法的优点是计算开销小、加密速度快,适用于少量或海量数据的加密,是目前用于信息加密的主要算法。

    其缺点是通信双方使用相同的密钥,很难确保双方密钥的安全性;密钥数据量增长时,密钥管理会给用户带来负担;此外,它仅适用于对数据进行加解密处理,提供数据的机密性,它不适合在分布式网络系统中使用,密钥管理困难,且成本较高。

    非对称加密算法

    非对称加密算法也叫公开密钥算法,其加密和解密是相对独立的,使用不同的密钥。它主要用于身份认证、数字签名等信息交换领域。公钥密码体制的算法中最著名的代表是RSA,此外还有背包密码、DSA,McEliece密码、Diffe_Hellman、Rabin、零知识证明、椭圆曲线、EIGamal算法等。非对称加密算法的优点是可以适应网络的开放性要求,且密钥管理问题也较为简单,可方便地实现数字签名和验证。其缺点是算法复杂、加密数据的速率较低。然而,无论是对称加密算法还是非对称加密算法都存在密钥泄露的风险。因此,Rivest在1989年开发出MD2算法,不需要密钥,引发了杂凑算法(也称Hash函数)的研究,即把任意长的输入消息字符串变化成固定长的输出串,不需要密钥,且过程是单向的,不可逆的。比较流行的算法有MD5,sha-1,RIPEMD以及Haval等。杂凑算法不存在密钥保管和分发问题,非常适合在分布式网络系统上使用,但因加密计算复杂,通常只在数据量有限的情形下使用,如广泛应用在注册系统中的口令密、软件使用期限加密等。数据加密技术能保证最终数据的准确性和安全性,但计算开销比较大,加密并不能防止数据流向外部,因此,加密自身不能完全解决保护数据隐私的问题。数据加密算法作为隐私保护的一项关键技术,大数据时代研究重点将集中在对已有算法的完善;综合使用对称加密算法和非对称加密算法。随着新技术的出现会研究出符合新技术发展的新加密算法。

    对称加密和非对称加密都有分国际算法和国密算法。

    非对称加密:RSA(国际算法),SM2(国密算法)

    对称加密:DES(国际算法), SM4(国密算法)

    以RSA加密过程为例

    RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

    06c0878b516ba517341b4308aa70ea3d.png

    素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。

    公约数只有1的两个数,叫做互质数。

    让m去被n整除,只取所得的余数作为结果,就叫做模运算。

    步骤例如:

    (1)设计公私密钥(e,n)和(d,n)。

    令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3与20互质)则e×d≡1 modf(n),即3×d≡1 mod 20。

    d怎样取值呢?可以用试算的办法来寻找。试算结果见

    2bd9df7dad53d8231e6af726758dd524.png

    通过试算我们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。因此,可令d=7。从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU=(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。

    (2)英文数字化。

    将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,如表示

    6370aa74cc7db8acf34f9ddbcbe87462.png

    则得到分组后的key的明文信息为:11,05,25。

    (3)明文加密

    用户加密密钥(3,33)将数字化明文分组信息加密成密文。由C≡Me(mod n)因此,得到相应的密文信息为:11,31,16。

    (4)密文解密。

    用户B收到密文,若将其解密,只需要计算,即:

    26899a6e25c895ba3a0a777012a97f58.png

    用户B得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。

    RSA的缺点:

    1.产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

    2.分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。

    展开全文
  • 非对称加密有哪些 RSA:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,可用于加密,也能用于签名。 DSA:数字签名...

    非对称加密有哪些

    RSA:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,可用于加密,也能用于签名。
    DSA:数字签名算法,仅能用于签名,不能用于加解密。
    DSS:数字签名标准,技能用于签名,也可以用于加解密。
    ELGamal:利用离散对数的原理对数据进行加解密或数据签名,其速度是最慢的。

    展开全文
  • 在上一篇文章【算法大杂烩】常见算法的归类和总结——对称加密算法 中我们简要介绍了常见的对称加密算法的相关知识。这次我们趁热打铁,介绍【非对称加密... 非对称加密算法的应用场景有哪些非对称加密算法  ...

            在上一篇文章【算法大杂烩】常见算法的归类和总结——对称加密算法 中我们简要介绍了常见的对称加密算法的相关知识。这次我们趁热打铁,介绍【非对称加密算法】, 通过本文的阅读,你可以了解到以下知识:

    • 什么是非对称加密算法?
    • 对称加密算法和非对称加密算法最本质的区别是什么?
    • 常见的非对称算法哪些以及它们的特性和区别是什么?
    • 非对称加密算法的应用场景有哪些?

    非对称加密算法


           世界万物都是平衡的,正如计算机的世界一样,有0的地方就一定有1;同样的,在算法理论上,既然有【对称加密算法】,那肯定就会有【非对称加密算法】。

            非对称算法,顾名思义:算法的执行过程是不对称的,也就是说加解密双方的密钥是不对称的。在非对称算法的理论上,密钥有公钥和私钥之分:其中私钥是代表自己唯一身份的一组密钥标识,不同的非对称加密算法,采用不同的数学理论来标识这个“唯一性”,比如RSA算法,使用的是“很大的素数”这种方法来标识;通常来说,私钥是不对外公开的,就好比藏在自己心里的秘密一样,不能被外人知晓,否则,数据的加密就变得不可靠,存在密钥泄露的风险。与私钥对应的密钥叫公钥,公钥与私钥正好相反,它是允许对外公开的,也就是任何人都可以持有加密方的公钥信息。看到这里,很多童鞋开始疑问:既然密钥(公钥)都公开了,那加密还有什么用,谈何安全性可言?有这样疑问的童鞋,大概思路还停留在【对称加密算法】的基础上,等我详细讲解完【非对称加密算法】的加密和解密,你就一定明白到底是怎么一回事了。

            非对称算法的加密和解密的特点是:一段数据明文经私钥加密后,则需要使用该私钥对应的公钥做解密;反之,一段数据明文经公钥加密后,则需要使用该公钥对应的私钥做解密;即【公钥加密对应私钥解密,私钥加密对应公钥解密】。使用公式表达如下:其他E表示加密,D表示解密,PriKey表示私钥,PubKey表示公钥,A、B分别表示通讯双方,P表示数据明文,C表示数据密文。

                         通讯方A                                   通讯方B

    • E(P) by PriKey[A]  = C      对应     D(C) by PubKey[A] = P
    • E(P) by PubKey[B]  = C    对应     D(C) by PriKey[B] = P

           通过如上公式,我们可以很清晰的看到,通讯AB双方需要使用非对称算法加密通讯报文,必须想方设法获取到对方的公钥,这样整个加密的通道才能完全打通。而前面我们也说到了,自己的公钥一般都是公开的,允许任何人持有,只要保证自己的私钥是保密的即可,这就是SSL通讯的理论基础。在SSL通讯之前,通常会有通讯握手动作,这个握手动作就是为了取得对方可信任的公钥,至于如何保证自己取得的公钥就是对方的真实公钥,而不是非法监听报文的“中间人”的假公钥,这就是SSL双向认证要解决的核心问题。该部分的内容,后续会有更为详细的文章做更近一步的介绍。


    对称加密算法与非对称加密算法的本质区别


          通过上面对非对称算法的介绍,大家可以了解到非对称算法核心的部分就是:密钥分为公钥和私钥,私钥保密公钥公开,私钥加密的密文需要使用公钥解密,公钥加密的密文需要私钥解密。具体的非对称算法和对称算法的区别如下表所列:

    对称加密算法和非对称加密算法的区别
    算法 密钥类型 加密解密的特点
    对称加密算法 通讯双方有且只有一个共同的密钥K 加密方使用密钥K加密,解密方使用密钥K解密
    非对称加密算法

    密钥有分私钥和公钥;

    通讯双方分别持有自己的私钥和对方的公钥;

     

    加密方使用自己的私钥加密数据,解密方使用对方的公钥解密数据;

    加密方使用对方的公钥加密数据,解密方使用自己的私钥解密数据;


    非对称加密算法的分类和对比


            常见的非对称加密算法有RSA算法、SM2算法;前者是国际通用的算法,后者是国密算法的一种。

    RSA算法

            RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。【摘自: 百度百科 RSA算法 】

            RSA加密算法的密钥长度不像我们所认知的对称加密算法 ,它的密钥长度是可变的,一般用位来表示,常见的有1024位和2048位,甚至4096位。密钥的位数越长,理论上来说,解密的难度越大,加密的强度就越大。综合加密级别和使用的便利性,【RSA2048】是我们最常见的。当RSA的密钥位数确定了,那它的【模长】也就确定了,模长的值为密钥位数对应的字节数;计算公式如下,其实M为模长,B为密钥的长度:

    • M = (B + 7) / 8     当M等于1024位时,对应的模长为128字节;当M等于2048位时,对应的模长为256字节。

           了解【模长】的概念之后,我们需要知道RSA算法执行加密解密操作时,基本的数据块长度。在RSA算法中,执行加密和解密操作,输入的数据块长度都必须等于模长,否则算法内部无法处理;即RSA密钥的长度不同,对应输入数据块的长度也是不同的,这一点与DES、AES等对称加密算法是完全不一样的。

           假设我们有4个RSA接口

    • RSA_prikey_encrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pri_key);
    • RSA_prikey_decrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pri_key);
    • RSA_pubkey_encrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pub_key);
    • RSA_pubkey_decrypt(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pub_key);

            有趣的是,当我们有一段固定的数据in,分别输入RSA_pubkey_encrypt和RSA_pubkey_decrypt接口,得出的out居然是一样的!同样的在类似的私钥接口,也有类似的现象。经过这个实验,我么可以得出结论:根本没有所谓的公钥加密和公钥解密之分,公钥加密就是公钥解密,私钥加密也就是私钥解密;所以我们应该对公钥私钥、加密解密做个统一叫法,应该就是私钥运算和公钥运算。所以以上的接口应改为:

    • RSA_prikey_operation(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pri_key);
    • RSA_pubkey_operation(uint8_t *out, int *out_len, const uint8_t *in, int in_len, const RSA_KEY *pub_key);

    SM2算法

           SM2算法是国产的非对称算法,它的诞生就是为了取代RSA算法。SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小。SM2算法和RSA算法比较如下:

      SM2 RSA
    算法结构 基本椭圆曲线(ECC) 基于特殊的可逆模幂运算
    计算复杂度 完全指数级 亚指数级
    存储空间 192-256bit 2048-4096bit
    秘钥生成速度 较RSA算法快百倍以上
    解密加密速度 较快 一般

            SM2算法与RSA算法类型,它也有公钥和私钥之分,它的密钥特点是私钥固定长度32字节,而公钥有x和y两个分量,每个分量都是32字节,总共是64字节。

            在执行加密运算时,输入数据块的长度是变长的,而加密后的密文长度等于输入长度+96字节。

            在执行签名运算时,输入数据块的长度也是变长的,但签名后的数据长度则固定为64字节。

            限于篇幅原因,后续再写专门的文章来介绍SM2算法。


    非对称加密算法的应用场景


            值得注意的是,数据加解密的过程中,虽然公钥和私钥都可以用于加密,也都可以用于解密,并没有严格的限制;但是,在实际的应用中,通常有:

    • 私钥加密,公钥解密:通常应用有签名、验签,即产生签名的一方使用自己的私钥对数据进行签名操作,而验签签名数据是否合法的一方使用签名方的公钥对签名数据进行验签;所以这里可以简单地认为,签名就是私钥加密,验签就是公钥解密。
    • 公钥解密,私钥解密:通常应用在对数据的加密传输,即加密方使用解密方的公钥做加密动作,这样就意味着这段加密数据只有解密方一人能解开,因为解密方的私钥是不公开的,只有它自己知道,这样就可以很好地保证的加密数据的安全性。

           此次关于非对称加密算法的介绍,就到此结束,如果需要学习更多有关非对称加密算法的知识,可以自行深入学习RSA算法和SM2算法的更多算法细节,相信你一定有更多的收获。后续会有详细介绍非对称算法在实际应用场景的文章,敬请关注,谢谢。

    展开全文
  • 非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。是一种 高级的双保险加密方式,一般的实现加密方式DH密钥交换算法,RSA基于因子...
  • 常见加密算法有哪些?是否对称

    千次阅读 2020-01-06 09:28:04
    常用的非对称加密算法:RSA、DSA、ECC 单向散列函数的加密算法:MD5、SHA 【Java面试题与答案】整理推荐 基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与...
  • 对称加密算法

    千次阅读 2016-02-25 16:05:09
    哪些是对称加密算法()A、AES B、DESC、DSAD、RSAE、3DESF、TDEAG、BlowfishH、RC5I、IDEAJ、ECC 解析:对称加密算法有AES、DES、3DES、TDEA、Blowfish、RC5、IDEA 非对称加密算法有DSA、ECC、RSA
  • 常用的加密算法有哪些

    千次阅读 2016-12-08 14:47:57
    常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 指加密和解密使用相同密钥的加密算法。 常见的对称加密算法有DES、3DES、和AES等; 对称加密 指加密和解密使用相同密钥的加密...
  • 根据加解密的密钥是否相同,加密算法可以分为对称加密、非对称加密和对称加密与非对称加密的结合三种形式。而在区块链技术中所使用的加密算法最常见的当属哈希算法和非对称加密两种。哈希算法哈希算法(Secure Hash ...
  • 1.3、常见的对称加密算法有哪些?2、非对称加密2.1、什么是非对称加密?2.2、非对称加密的优缺点是什么?2.3、常见的非对称加密有哪些?2.4、对称加密和非对称加密的异同3、单向加密3.1、什么是单向加密?3.2、单向...
  • 加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码,加密技术...非对称加密,如 RSA 原理:同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥下发
  • 加密算法我们整体可以分为:可逆加密和不可逆加密,可逆加密又可以分为:对称加密和非对称加密。 一、不可逆加密 常见的不可逆加密算法有MD5,HMAC,SHA1、SHA-224、SHA-256、SHA-384,和SHA-512,其中SHA-224、SHA-...
  • 加密算法我们整体可以分为:可逆加密和不可逆加密,可逆加密又可以分为:对称加密和非对称加密。 一、不可逆加密 常见的不可逆加密算法有MD5,HMAC,SHA1、SHA-224、SHA-256、SHA-384,和SHA-512,其中SHA-224、...
  • 常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 对称加密 指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要...
  • 对称加密与非对称加密前言对称加密非对称加密神奇的问题 前言 这是我学习https遇到的问题。我刷面经的时候在好多地方都看到了面试官问一些https的知识,搞得我很难受,根本就不懂啥是https,只知道它比http安全,但...
  • 加密,解密的话,分为,对称加密,和非对称加密。 像 des,aes 就是对称加密 非对称 RSA,DSA,等。 对称和非对称是指,加密和解密的时候,是不是需要同一个秘钥。非对称加密,使用私钥和公钥两种秘钥。 支付宝...
  • 前文说明TDE的时候,使用了AES_256,SQL Server对称秘钥加密算法还有有哪些?哪些算法可用,有哪些...在加密算法方面,对称加密算法要比非对称加密算法快得多。因此,它们是在SQL Server中加密数据的最佳选择。 SQL
  • 对称加密 网络的数据传输从发送方发出到接收方接收到,要经过数个节点才能到达目的地,在这个过程中难免会被别有用心的人...现行的加密过程中,一般加密算法是公开的,密钥是自己持有,发送方密钥对数据进行加...
  • ssl 加密算法

    2019-09-02 13:02:43
    加密算法有哪些 对称加密:RC4、DES、AES 非对称加密:RSA、DSA HASH...
  • 文章前导在日常的开发过程中,主要使用的加密算法有摘要算法、对称加密算法和非对称加密算法。融合自己的理解和一些简单的示例,记录下来,便于日常查看。后期也会不断的更新该文章,由于平台问题,只...
  • 加密算法简介

    2018-12-13 17:20:36
    加密算法有哪些类别? 1.对称加密算法 如:DES,3DES,DESX,Blowfish,IDEA,RC4,RC5,RC6,AES 2.非对称加密算法 如:RSA,ECC,Diffie-hellman,EI Gamal,DSA 3.Hash算法 如:MD2,MD4,MD5,H...
  • 按照加密和解密的密钥是否相同,可分为对称加密,非对称加密,散列算法等。对称加密:又称为 共享密钥加密算法。在 对称加密算法 中,使用的密钥只有一个,发送 和 接收 双方都使用这个密钥对数据进行 加密 和 解密...
  • 数字证书和加密算法数字证书定义用途X509V3的证书格式加密算法分类摘要算法对称算法有哪些?DES算法AES-128算法非对称算法有哪些?用途对称密钥和非对称密钥的区别和优缺点?对称密钥和非对称密钥的优缺点对称密钥:...
  • 区块链中主要应用非对称加密算法非对称加密算法中公钥密码体制根据其所依据的难题一般分为三类,一类是大整数分解问题类,一类是离散对数问题类,最后一类就是椭圆曲线类,也就是椭圆曲线算法。大整数分解问题类指...
  • 大家都知道,区块链的关键技术组成主要... 首先,我们需知道区块链中用到的密码学算法有哪些?其实就两大类: - 哈希算法 - 非对称加密算法 一、区块链中的哈希算法 哈希算法是区块链中用的最多的一种算法,它...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

非对称加密算法有哪些