IT点滴

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

RSA其实很简单

Posted on 2009-05-25 13:53  Ady Lee  阅读(546)  评论(0编辑  收藏  举报

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也就失去了存在的意义。