保证信息在传输过程中的安全性:

            保密通信、密钥交换、数字签名。

  RSA算法 Diffie-Hellman算法 DSA算法
保密通信 × ×
密钥交换 ×
数字签名 ×

数字签名具有抗否认、抗假冒、抗篡改伪造的特性

M----明文

Keb----B的公钥

Kdb----B的私钥

当先用私钥加密时,将相当于B对明文进行了数字签名,B不可抵赖。

RSA算法:

速度:

      1.由于都是大数计算,RSA最快的情况也比DES慢许多倍,无论是硬件还是软件实现。速度一直是RSA的缺陷。一般来说只用于少量的数据加密。

       2.RSA是被研究是最广泛的公钥算法,提出到现在已经历了二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

执行过程:

     1.生成两个大素数p和q

     2.计算这两个素数的乘积n=p*q

     3.计算小于n并且与n互质的整数的个数,即欧拉函数φ(n)=(p-1)*(q-1)

     4.选择一个随机数e满足1<e<φ(n),并且e和φ(n)互质,即gcd(e,φ(n))==1

     5.解方程 e*d ≡1 mod φ(n),求出d

     6.保密d,p和q(销毁),公开n和e

     公钥公开:PU={e,n}

     私钥保密:PR={d,n}

RSA使用:

      加密一个报文M,发送方:

          1.获取接收方的公钥 PU={e,n}

          2.计算:C = Me mod n, where 0<=M<n

       解密密文C,接收方:

          1.用自己的私钥PR={d,n}

          2.计算:M=Cd mod n

RSA注意:

       1.RSA加密时,明文以分组的形式加密,每一个分组的比特数应该小于log2n比特,即M<n

        2.选取的素数p和q要足够大,从而乘积n足够大,在事先不知道p和q的情况下,分解n是计算上不可行的。

            如何得到足够大的随机素数?

               实际应用所采用的方法是:首先,产生一个足够大的随机数,然后,通过采用一个概率多项式时间算法来检测该随机数是否为素数(即是否具有素性)

               常用的两个素性测试算法:Solovay-Strassen和Miller-Rabin

RSA例子----密钥

        1.挑选质数:p=17 & q=11

        2.计算 n=p*q=17*11=187

        3.计算 φ(n)=(p-1)*(q-1)=16*10=160

        4.选择 e:gcd(e,160)=1;    选择  e=7

        5.求解 d:e*d≡1 mod 160 且 d<160  , d=23,显然 23*7=161=160+1

        Public key Pu={7.187}

        Private key PR={23,187}

       

        RSA 加密/解密:   M=88(注意88<187)

        加密:   C = 887 mod 187 = 11

        解密:    M = 1123 mod 187 = 88

         

        求解方程 e*d≡ 1 mod φ(n)

            当e=1001    ,    φ(n)=3837时:

             1.欧几里得算法(辗转相除法)

                     3837 = 3 * 1001 + 834

                     1001 = 1 * 834 +167

                      834 = 4 * 167 + 166

                      167 = 166 + 1

              2.回代:

                     1  = 167 - 166

                        = 167 - (834 - 4*167 )

                        = 5 * 167 -834

                        = 5 * (1001 - 834)-834

                        = 5  * 1001 - 6 * 834

                        = 5 * 1001 - 6 *(3837 - 3 * 1001)

                        =  23 * 1001 - 6 * 3837

数字签名---RSA算法的更多相关文章

  1. Java数字签名——RSA算法

    数字签名:带有密钥(公钥,私钥)的消息摘要算法. 验证数据的完整性,认证数据的来源,抗否性 OSI参考模型 私钥签名,公钥验证 签名算法:RSA,DSA,ECDSA 算法1 :RSA MD,SHA两类 ...

  2. 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥

    概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很ea ...

  3. 一个基于RSA算法的Java数字签名例子

    原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...

  4. 跨越千年的RSA算法

    转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

  5. C# RSA 算法

    RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力的公钥加密算法, ...

  6. SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二)

    SSH原理与运用(一)和(二):远程登录  RSA算法原理(一)和(二) http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html ht ...

  7. 基于私钥加密公钥解密的RSA算法C#实现

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  8. RSA算法详解及C语言实现

    RSA算法它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman.但 ...

  9. RSA算法python实现

    RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名.详情请看维基:http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF ...

随机推荐

  1. 电脑网络诊断显示Win10无法与设备或资源(DNS)通信解决办法

    最近是做多错多还是人有点儿衰神附体,软件,电脑系统,各种问题层出不穷,今天早上打开电脑发现不少软件都无法联网,神马百度商桥,腾讯浏览器,百度云...昨天百度商桥打不开还以为是软件出了问题,因为火狐浏览 ...

  2. CSS躬行记(2)——伪类和伪元素

    一.伪类选择器 伪选择器弥补了常规选择器的不足,能够实现一些特殊情况下的样式,例如在鼠标悬停时或只给字符串中的第一个字符指定样式.与类选择器类似,可以从HTML元素的class属性中查看到,但伪选择器 ...

  3. Java实验五参考答案

    1.找错误 btOK.setOnAction( new EventHandler<ActionEvent> { public void handle (ActionEvent e) { S ...

  4. C/C++知识总结 四 循环与分支语句

    C/C++循环与分支语句 循环与分支语句的意义 关系运算符.逻辑运算符 for循环和嵌套for循环(基于范围for循环) while循环与do while循环 分支if语句.if else语句.if ...

  5. 【Jenkins】使用 Jenkins REST API 配合清华大学镜像站更新 Jenkins 插件

    自从去年用上了 Jenkins 进行 CI/CD 之后,工作效率高了不少,摸鱼的时间更多了.不过 Jenkins 好是好,但在功夫网的影响下,插件就是经常更新不成功的,就像下面这样子: 查了不少资料, ...

  6. 实践指路明灯,源码剖析flink-metrics

    1. 通过上期的分享,我们对 Metrics 类库有了较深入的认识,并对指标监控的几个度量类型了如指掌. 本期,我们将走进当下最火的流式处理框架 flink 的源码,一同深入并学习一下别人家的代码. ...

  7. 基于Websocket开发的仿微信聊天室

    一.运行环境及涉及技术:----------------------------------* Visual Studio 2019* SQL SERVER 2008 R2* .Net FrameWo ...

  8. Python魔法缓存,以数字开始

    Python魔法缓存,以数字开始 众所周知,Python是弱类型的脚本语言,变量的定义是不用声明类型的. a = 1 Python所有数字的本质都是对象, 他们是不可改变的数据类型,这意味着改变数字数 ...

  9. 【php】LAMP中开启错误提示

    vi /usr/local/php/etc/php.ini 查找display_errors 开启On即可

  10. 2017蓝桥杯算式900(C++C组)

    题目:算式900 小明的作业本上有道思考题:  看下面的算式:  (□□□□-□□□□)*□□=900  其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字.  注意:0不能作为某 ...