RSA 算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA 算法相关的知识,希望对你有一定的参考价值。
参考技术A 算法1.1 RSA密钥对生成输入:安全参数l.
输出:RSA公钥(n,e)和私钥d.
1、随机选择两个素数p和q,p和q的长度同为l/2
2、计算n=pq和z=(p-1)(q-1)
3、任意选择整数e,e满足1<e<z,且gcd(e,z)=1
4、计算整数d,d满足1<d<z,且ed=1 (mod z).
5、返回(n,e,d)
算法1.2 基本RSA加密
输入:RSA公钥(n,e),明文m属于[0,n-1]
输出:密文c
1、计算c=m^e mod n
2、返回m
算法1.3 基本RSA解密
输入:RSA公钥(n,e),RSA私钥d,密文c
输出:明文m
1、计算m=c^d mod n
2、返回m
算法1.4 基本RSA签名生成
输入:RSA公钥(n,e),RSA私钥d,消息m.
输出:签名s.
1、计算h=H(m)
2、计算s=h^d mod n
3、返回s.
算法1.5 基本RSA签名验证
输入:RSA公钥(n,e),消息m,签名s.
输出:接受或拒接签名
1、计算h=H(m)
2、计算h'=s^e mod n.
3、若h=h',则返回‘接受签名’,否则返回‘不接受签名’
RSA加密算法原理
请用用简单的语言描述~
RSA加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法,于1978年由美国麻省理工学院(MIT)的三位学着:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。它的原理较为简单,假设有消息发送方A和消息接收方B,通过下面的几个步骤,就可以完成消息的加密传递:
消息发送方A在本地构建密钥对,公钥和私钥;
消息发送方A将产生的公钥发送给消息接收方B;
B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;
反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。
由于公钥是消息发送方A暴露给消息接收方B的,所以这种方式也存在一定的安全隐患,如果公钥在数据传输过程中泄漏,则A通过私钥加密的数据就可能被解密。
如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。
当然,这种方式可能存在数据传递被模拟的隐患,但可以通过数字签名等技术进行安全性的进一步提升。由于存在多次的非对称加解密,这种方式带来的效率问题也更加严重。 参考技术A RSA算法 :它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。
首先, 找出三个数, p, q, r, 其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数...... p, q, r 这三个数便是 private key 接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1)..... 注:意思是rm除以(p-1)(q-1)的余数=1这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了..... 再来, 计算 n = pq....... m, n 这两个数便是 public key 编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a < n.... 如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t), 则每一位数均小於 n, 然后分段编码...... 接下来, 计算 b == a^m mod n, (0 <= b < n), 注:^表示次方,不要理解为C#中的XORb 就是编码后的资料...... 解码的过程是, 计算 c == b^r mod pq (0 <= c < pq), 於是乎, 解码完毕...... c 和 a 其实是相等的 :)本回答被提问者和网友采纳
以上是关于RSA 算法的主要内容,如果未能解决你的问题,请参考以下文章