基于boost库的RSA加密算法
简介
RSA加密算法是一种公开密钥加密体制中的一种加密算法,它通过两个不同的密钥进行加密和解密。一个是公开密钥,一个是私有秘钥。
在使用的过程中通过密钥对未加密的内容(明文)加密之后变成密文,只有通过另一个专属的密钥进行解密,将密文还原成明文。
对称加密和非对称加密
- 对称加密
加密和解密使用的都是同一个密钥。 - 非对称加密
加密和解密需要使用不同的密钥。
(1)、A生成两把密钥(公钥和私钥)。公钥是公开的,所有人都可以使用它来进行加密,而私钥是保密的。
(2)、B获取了A的公钥之后,并使用它来对信息进行加密。
(3)、A得到加密后的信息,使用私钥进行解密操作,获取原文。
而作为解密的工具,只要私钥不被泄露,AB双方的通信就是安全的,就算截获了信息,也无法破解出原文。
加密方式
公钥加密(E,N):密文 = 明文 ^ E % N;
私钥解密(D,N):明文 = 密文 ^ D % N;
数学基础
互质关系
如果两个正整数,除了1之外没有其他的公因子,那么就称这两个数是互质关系。比如25和30。
对于互质关系有以下结论:
- 任意两个质数是互质关系。比如3和7。
- 一个数是质数,和另一个数不成倍数关系,两个数 就构成了互质。比如3和16。
- 1和任意的一个自然数都是互质关系。
- a是大于1的任意整数,则a和a-1构成互质关系。如15和14.
- a是大于1的奇数,则a和a-2是互质关系,如11和13.
欧拉函数
小于x的正整数中与x互质的的数的数目。(下图中a1,a2^……an是x的所有质因数,x是不为0的整数)
特性如下:
1.如果n是质数,则φ(n) = n -1;
2.如果m和n是互质的,则φ(mn) = φ(m) * φ(n);
3.如果m和n都是质数,则φ(mn) = φ(m - 1) * (n - 1)。
欧拉定理: 如果m和n互质,则m^φ(n) % n = 1 。
模反元素: 又称逆元,如果m和n互质,则可以找一个正整数d,满足m * d % n = 1 。
密钥产生过程
当数学基础满足的时候,就可以得到两个钥匙的产生过程。
1、选择两个不相等的质数a,b,得N= ab;
2、计算φ(N),选择一个1<E<φ(N),且满足E和φ(N)互质,得到公钥 (E,N);
3、计算逆元D,通过逆元获取私钥 (D,N) ,其中D最小值可以取φ(N)/E。
如下例:
具体证明过程可以在这里进行观看和验算。
有了公钥和私钥之后就可以对信息进行加密,由于加密和解密都是属于模幂运算,所以就需要进行快速幂取模运算。
快速幂取模运算
同余定理
快速幂算法:
通过这个算法可以减少幂运算的次数,具体原因见下图: