RSA其实很简单:
1. 选两个大素数p, q
2. 计算n=pq
3. 选取e,使得e与(p-1)(q-1)互素
4. 计算d=e^(-1)mod((p-1)(q-1))
n, e就是RSA的公钥,需要告诉每一个可能像你发送加密信息的人,
d就是私钥,只有你能知道。
但别人要想你发送信息m时,需要使用加密算法将明文m变成秘文c
c=m^(e) (mod n)
你收到秘文c后,使用解密算法变回明文m
m=c^(d) (mod n)
抄一个例子:
取:p=47 q=71
那么:n=pq=3337 (p-1)(q-1)=3220
取:e=79
那么:d=79^(-1) mod 3220 = 1019
加密明文m=688
c=688^(79) (mod 3337) = 1570
解密密文c=1570
m=1570^(1019) (mod 3337) = 688
就这么简单。不过为了足够安全,要求p, q都很大,一般至少要512bit,
这样生成的RSA密钥是1024bit。
可是如果你希望把它做成注册码算法,你肯定要把n, e, d都放到程序里去,
这样和普通的对称密钥算法没有任何区别。
这一段程序是为了选p, q和e的。这几个数字一般都是随机产生,然后
验证是否合法的。
e其实可以固定为65537,对加密效果没有影响
正像你看到的,RSA的密钥不是你随便挑的,是要从p, q两个大素数
计算得到的,p, q两个数在计算得到密钥后必须严格保密,最好丢弃。
RSA的安全性是基于大数分解的难度,也就是说从n要逆向得到p, q在目
前是没有什么好方法的,超过了目前计算机所拥有的计算能力。
一旦大数分解这个问题得到解决,RSA也就失去了存在的意义。