RSA 算法的C++实现 ➢ 概述 RSA 公钥加密算法是1977 年由Ron Rivest、Adi Shamirh 和 LenAdleman 在(美国麻省理工学院)开发的。RSA 取名来自开发他们三者的名字。RSA 是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO 推荐为公钥数据加密标准。 它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保 RSA 算法的安全性。 RSA 算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA 密钥至少为 500 位长,一般推荐使用 1024 位。 RSA 算法是一种非对称密码算法,所谓非对称,就是指该算法需要 一对密钥,使用其中一个加密,则 需要 用另一个才 能解密。 RSA 的算法涉 及 三个参 数,n、e1、e2。 其中,n 是两 个大质 数 p、q 的积 ,n 的二 进 制 表 示 时 所占 用的位数,就是所谓的密钥长度。 e1 和 e2 是一对相 关 的值 ,e1 可以任 意 取,但 要 求e1 与 (p-1)*(q-1)互 质 ;再 选 择 e2,要 求 (e2*e1)mod((p-1)*(q-1))=1 。 (n 及 e1),(n 及 e2)就是密钥对。 RSA 加解密的算法完 全相 同 ,设 A 为明 文,B 为密文,则 :A=B^e1 mod n;B=A^e2 mod n; e1 和 e2 可以互 换 使用,即 : A=B^e2 mod n;B=A^e1 mod n; ➢ RSA 算法的编 程 思 路 1) 确定 密钥的宽 度。 2) 随 机 选 择 两 个不 同 的素数 p 处 q,它们的宽 度是密钥宽 度的二 分之一。 3) 计算出p 和q 的乘积n 。 4) 在2 和Φ(n)之间随机选择一个数 e , e 必须和Φ(n)互素,整数 e用做加密密钥(其中 Φ(n)=(p-1)*(q-1))。 5) 从公式 ed ≡ 1 mod Φ(n)中求出解密密钥 d 。 6) 得公钥(e ,n ), 私钥 (d , n) 。 7) 公开公钥,但不公开私钥。 8) 将明文 P (假设 P 是一个小于 n 的整数)加密为密文 C,计算方法为: C = Pe mod n 9) 将密文 C 解密为明文 P,计算方法为: P = Cd mod n 然而只根据...