1、非对称加密过程:
        假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性、完整性、可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体过程如下:
        说明:
        国内目前使用双证书体系,即用户同时拥有签名证书、加密证书两张证书。签名证书是用户的身份认证,是和CA协商的结果,可用于对用户A的身份验证;加密证书是用来对信息进行加密,是用户和秘钥管理系统生成。我们在这里假设都适合CA进行交互。
        ①:此过程是生成公钥私钥的过程,我们这里基于RSA算法实现,RSA算法的详细说明在后面讲解。
        ②:此过程是CA对用户的身份进行签名,目的验证A的身份。这样在A与B通讯的过程中,A可以把自己的数字签名发给B,B得到此数字签名后就可以通过CA的公钥对其进行解密并进行身份验证,具体过程在后面讲解。
        ③④同理。
        ⑤:A对要传输的信息进行加密并传输,B接受到以后进行解密的过程。
 
2、RSA算法:
        RSA原理:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
        算法:
        (1)选择两个不同的大素数p和q;
        (2)计算乘积n=pq和Φ(n)=(p-1)(q-1);
        (3)选择大于1小于Φ(n)的随机整数e,使得gcd(e,Φ(n))=1;注:gcd即最大公约数。
        (4)计算d使得d*e=1mod Φ(n);注:即d*e mod Φ(n) =1。
        (5)对每一个密钥k=(n,p,q,d,e),定义加密变换为Ek(x)=xe mod n,解密变换为Dk(x)=yd mod n,这里x,y∈Zn;
        (6)p,q销毁,以{e,n}为公开密钥,{d,n}为私有密钥。
        实例:
        1. 假设p = 3、q = 11(p,q都是素数即可。),则N = pq = 33;
        2. r =Φ(n)= (p-1)(q-1) = (3-1)(11-1) = 20;
        3. 根据gcd(e,Φ(n))=1,即gcd(e,20)=1,令e=3,则,d = 7。(两个数交换一下也可以。)

  到这里,公钥和密钥已经确定。公钥为(N, e) = (33, 3),密钥为(N, d) = (33, 7)。

        代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class SimpleRSA
{
    /**
     *
加密、解密算法
     *
@param key 公钥或密钥
     *
@param message 数据
     *
@return
     */
    public static long rsa(int baseNum, int key, long message){
        if(baseNum
1 ||
key < 
1){
            return 0L;
        }
        //加密或者解密之后的数据
        long rsaMessage
= 0L;
           
        //加密核心算法
        rsaMessage
= Math.round(Math.pow(message, key)) % baseNum;
        return rsaMessage;
    }
 
    public static void main(String[]
args){
        //基数
        int baseNum
3 11;
        //公钥
        int keyE
3;
        //密钥
        int keyD
7;
        //未加密的数据
        long msg
= 24L;
        //加密后的数据
        long encodeMsg
= rsa(baseNum, keyE, msg);
        //解密后的数据
        long decodeMsg
= rsa(baseNum, keyD, encodeMsg);
           
        System.out.println("加密前:" +
msg);
        System.out.println("加密后:" +
encodeMsg);
        System.out.println("解密后:" +
decodeMsg);
    }

  

        结果:这样CA就保存了用户的公钥,其他任何人想法送给此用户信息,只需查询词公钥,加密发送即可,而此用户用只有自己知道的秘钥解密。
 
3、签名证书:
        签名证书的用途:加入有A用户向B用户发送了信息“A love you”,B接收到之后怎么确定就是A发送的呢(因为中间人攻击中,假如C截获了A发送的信息后,改成“C love you”,B是无法确定这两个信息的发送者,因他她们都同样用B的工要加密),于是产生了签名证书技术。
        签名证书是由CA用自己的私钥对用户的信息进行加密,并把发给用户的,用户可以在发送信息的过程中附加上自己的签名证书,让接受者验证信息的来源。当接受者接受到发送者的签名证书后即可用ca的公钥解密验证发送者的身份信息。
 
4、信息传输:
   过程:
        A. Alice 准备好要传送的数字信息(明文)。

B. Alice 对数字信息进行哈希(hash)运算,得到一个信息摘要。

        C. Alice 用自己的私钥(SK)对信息摘要进行加密得到Alice 的数字签名,并将其附在数字信息上。
        D. Alice 用Bob 的公钥(PK)对刚才随机产生的加密密钥进行加密,将加密后的密文传送给Bob
        E. Bob 收到Alice 传送过来的密文,用自己的私钥(SK)对密文解密。

F. Bob 用Alice 的公钥(PK)对Alice 的数字签名进行解密,得到信息摘要。

        G. Bob 用相同的hash 算法对收到的明文再进行一次hash 运算,得到一个新的信息摘要。
        H. Bob 将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
 
        采用数字签名,能完成这些功能:
       (1)确认信息是由签名者发送的; 
        (2)确认信息自签名后到收到为止,未被修改过; 
       (3)签名者无法否认信息是由自己发送的。
        
        但是上述过程存在问题,例如有用户C窃取A的电脑信息,把B的公钥修改成了自己的公钥,A用此公钥加密信息发给B,C在中间截获这个数据就可以获取这些私密信息。怎么应对这种情况呢?签名证书就派上用场了。
         证书中心用自己的私钥,对每一个用户的、的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。发送者在发送信息之前如果想核对接受者的公钥,只需用CA的公钥对B的签名证书进行解密确认即可。

【编程开发】非对称加密过程详解(基于RSA非对称加密算法实现)的更多相关文章

  1. 【转载】非对称加密过程详解(基于RSA非对称加密算法实现)

    1.非对称加密过程:         假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...

  2. MapReduce过程详解(基于hadoop2.x架构)

    本文基于hadoop2.x架构详细描述了mapreduce的执行过程,包括partition,combiner,shuffle等组件以及yarn平台与mapreduce编程模型的关系. mapredu ...

  3. C++编程规范和编译过程详解

    前言:因为c++基础打得不牢,所以准备花点时间再学一下c++的基础知识,主要是看网易云课堂里面的免费课程,把一些知识点做个笔记记下来. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  4. Swift 对象创建(PUT Object)过程详解——基于副本策略(一)

    swift中创建对象,即PUT object,根据选定的存储策略将对象内容写入至相应的服务器(object server).我们重点关注object controller和object servers ...

  5. nrf52——DFU升级USB/UART升级方式详解(基于SDK开发例程)

    摘要:在前面的nrf52--DFU升级OTA升级方式详解(基于SDK开发例程)一文中我测试了基于蓝牙的OTA,本文将开始基于UART和USB(USB_CDC_)进行升级测试. 整体升级流程: 整个过程 ...

  6. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂安装过程详解及安装失败解决方法

    因Excel催化剂用了VSTO的开发技术,并且为了最好的用户体验,用了Clickonce的布署方式(无需人工干预自动更新,让用户使用如浏览器访问网站一般,永远是最新的内容和功能).对安装过程有一定的难 ...

  7. SSL/TLS 握手过程详解

    在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...

  8. (转)Linux 开机引导和启动过程详解

    Linux 开机引导和启动过程详解 编译自:https://opensource.com/article/17/2/linux-boot-and-startup作者: David Both 原创:LC ...

  9. 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)

    继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...

随机推荐

  1. 扫描QPS控制——celery任务分多队列运行

    发包QPS控制,有两个难点. 1. redis交互流量的限制. 假设每分钟有1000条流量任务生成,每条跑20个插件,每个插件发5个数据包,每分钟约发十万请求. 那么在发包处做QPS会遇到一个问题,如 ...

  2. swoole,http\server 跨域---记一次php网站跨域访问上机实验

    缘由:为了更好的体验swoole组件优良的协程Mysql客户端,实现更好的并发设计:写了一个小程序. 环境准备: 没有采用任何框架,只是使用了smarty模版,来渲染后端php响应的数据,在一个htm ...

  3. ACM-ICPC 2018 青岛赛区现场赛 D. Magic Multiplication && ZOJ 4061 (思维+构造)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4061 题意:定义一个长度为 n 的序列 a1,a2,..,an ...

  4. BZOJ 2095 [Poi2010]Bridges (二分+最大流判断混合图的欧拉回路)

    题面 nnn个点,mmm条双向边(正向与反向权值不同),求经过最大边权最小的欧拉回路的权值 分析 见 commonc大佬博客 精髓就是通过最大流调整无向边的方向使得所有点的入度等于出度 CODE #i ...

  5. 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)

    Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...

  6. pycharm 头模板

    #!/usr/local/bin/python3 # -*- coding: utf-8 -*- """ @author: Ray @contact: raylively ...

  7. 爬虫----异步---高性能爬虫----aiohttp 和asycio 的使用

    前情提要: 首先膜拜loco大佬 肯定有人像我一样.不会异步,发一下. 一:性能比对 多进程,多线程,(这里不建议使用,太消耗性能) 进程池和线程池 (可以适当的使用) 单线程+异步协程   (推荐使 ...

  8. 安裝PHPBB

    1.下載PHPBB https://www.phpbb.com/downloads/ 2下載PHP http://windows.php.net/download/ 很多教程都介紹在WIN7用ISAP ...

  9. MAC 下视频转换格式软件 之 handbrake

    下载地址: https://handbrake.fr/

  10. Machine Schedule为什么UVA过了POJ过不了

    UVA1194 POJ1325 POJ要多判一个非零!!! #include<cstdio> #include<vector> #include<cstring> ...