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 算法的主要内容,如果未能解决你的问题,请参考以下文章

RSA算法的C++实现

密码学之公钥密码体系:RSA算法

rsa加密原理 RSA加密算法原理是啥

公钥密码系统及RSA公钥算法

RSA_RSA算法原理

密码学---公钥密码---RSA算法