编程语言
首页 > 编程语言> > RSA 加密算法

RSA 加密算法

作者:互联网

RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的

[1]

RSA 加密算法的可靠性源自于对于极大的整数做因数分解很难在有限的时间内得到有效的解,在未来的某一天,随着计算机性能的不断提高,RSA 算法的可靠性可能会降低,但是就目前的计算机来讲很难通过暴力的方式直接破解经过 RSA 算法加密之后的信息


数学基础


算法原理


公钥和私钥

  1. 随意选择两个大的质数 \(p\) 和 \(q\),计算两者的积 \(N = p*q\)
  2. 根据上文提到的欧拉函数,求得 \(r = \varphi(N) = \varphi(p)*\varphi(q)=(p - 1)*(q - 1)\)​
  3. 选择一个小于 \(r\) 的正整数 \(e\),使得 \(e\) 和 \(r\) 互质,并求得 \(e\) 关于 \(r\) 的模反元素 \(d\)
  4. 删除 \(p\) 和 \(q\)

经过上述操作之后,得到的 \((N, e)\) 就被称之为公钥,而 \((N, d)\) 就被称之为私钥。一般会选择两个非常大的质数,经过操作之后会再将这两个数字进行转码,就是一般见到的存储形式


消息的加密

假如现在想要发送一个消息 \(m\) 到指定的地点,由于公钥是可见的,因此首先将 \(m\) 通过公钥 \((N, e)\) 转换为对应的整数(由于数据在计算机上都是通过二进制的方式存储的,可以以读取数字的方式读取信息),一般信息都会很长,因此会得到许多转换后的整数,具体单个整数的计算方式为:

\[c = n^e\bmod N \]


消息的解密

每读取到一个整数 \(c\),通过下面的方式来进行解密:

\[n = c^d \bmod N \]

得到 \(n\) 之后再对其进行对应的编码即可还原原来的信息

解密的原理:\(c^d = n^{ed} \bmod N\)

由于 \(e*d \equiv 1 \pmod r\)​,因此 \(e*d = 1 + h\varphi(N)\)​,则有:

\[n^{ed} = n^{1+h\varphi(N)} = n*n^{h\varphi(N)} = n*(n^{\varphi(N)})^h \]

因此 \(n^{ed} \equiv n \pmod N\)


参考:

[1] https://zh.wikipedia.org/wiki/RSA加密演算法

[2] https://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

[3] https://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

[4] https://zh.wikipedia.org/wiki/欧拉函数

标签:pmod,ed,质数,RSA,varphi,互质,加密算法,equiv
来源: https://www.cnblogs.com/FatalFlower/p/15786812.html