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. [转载] Linux启动过程详解-《别怕Linux编程》之八

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket.为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. = ...

  4. (转载)Linux启动过程详解

    启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘 ...

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

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

  6. DNS解析过程详解(转载)

    DNS解析过程详解(转载) DNS Domain Name System 域名系统,它就是根据域名查出IP地址.    先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址ww ...

  7. 转载:C/C++源代码到可执行程序的过程详解

    C/C++源代码到可执行程序的过程详解 编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格 ...

  8. SSL/TLS 握手过程详解

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

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

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

随机推荐

  1. selenium+Page Objects(第三话)

    写好BasePage基类和页面元素定位后,就可以针对每个页面写业务逻辑了 1.编写每个页面page类,拿其中一个页面为例 fourth_page.py(名字我随便取的,实际中希望能取一些有意义的名字) ...

  2. iTunes , iCloud 用吐了也没把照片给备份好

    下载了iTools ,轻松就倒出来了. Apple这是怎么了,还能不能正常用了? 以前iCloud出来以前,[同步]这个功能,理解起来虽然费劲,还算是能用的. 这回直接就没法倒出照片了?

  3. (原创)PBS | SGE 智能任务投递系统monitor | python实现

    之前看到过高手写的一个monitor,用python面向对象实现的,依赖几个核心的python包,drmaa,zodb,理论上来说解决了所有的任务投递问题. 但是在复杂的集群环境下还是会经常出问题,这 ...

  4. centOS 6.5安装python和nginx

    一.安装python3.5 1.安装python3.5

  5. vs2013添加mysql对EF的支持(转+说明)

    在vs2013中使用mysql连接entityFramework经常会遇到这个问题:您的项目引用了最新实体框架:但是,找不到数据连接所需的与版本兼容的实体框架数据提供程序.请退出此向导,安装兼容提供程 ...

  6. vue核心之虚拟DOM

    一.前言 虚拟DOM概念随着react的诞生而诞生,由facebook提出,其卓越的性能很快得到广大开发者的认可:继react之后vue2.0也在其核心引入了虚拟DOM的概念,本文将以vue2.0使用 ...

  7. 原生JS实现瀑布流布局

    瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 1.首先瀑布流所有的图片应该保持宽度一致,高 ...

  8. Tempter of the Bone HDU - 1010

    The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it u ...

  9. jq post

    var source=[]; $.ajax({ type: "post", url: "connectdb/select.jsp", data: {databa ...

  10. [luogu P2324] [SCOI2005]骑士精神

    [luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...