1、加密算法概述
加密算法根据内容是否可以还原分为 可逆加密和非可逆加密 。
可逆加密根据其加密解密是否使用的同一个密钥而可以分为 对称加密和非对称加密 。
所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。
非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。
RSA加密算法是一种非常具有代表性的非对称加密算法。
2、RSA公钥与密钥的产生
随意选择两个大的质数p和q,p不等于q,
计算公钥和私钥的公共模数 n = pq 。
计算模数n的欧拉函数 φ(n) .
根据欧拉函数,求得r = (p-1)(q-1)
选择一个小于 r 的整数 e,使1 < e < φ(n) , 且e与φ(n)互质.
求得 e 关于模 r 的模反元素,满足 de ≡ 1 (mod φ(n) ), (k为某个正整数).命名为d。(模反元素存在,当且仅当e与r互质)
将 p 和 q 的记录销毁。
n与e决定公钥, n与d决定私钥.
3、RSA C/C++ 程序示例