rsa加密 java_RSA加密算法

5.1 密钥的生成过程

1. 随意选择两个大的素数p和q,p不等于q,计算n = pq.

2. 根据欧拉函数的性质3,求得r=φ(n)=φ(p)φ(q)=(p-1)(q-1).

3. 选择一个小于r的整数e,且e与r互素;并求得e关于r的模反元素,命名为d.(模反元素存在,当且仅当e与r互质; 求d令ed≡1(mod r))

4. 将p和q的记录销毁

其中(n,e)是公钥,(n,d)是私钥. 例如:

1. A随机选两个不相等的质数61和53,并计算两数的积n=61*53=3233,n的长度就是密钥长度。3233的二进制是110010100001,一共12位,

所以这个密钥就是12位. 实际应用中,RSA密钥一般是1024位,重要的场合是2048位.

2. 计算n的欧拉函数; φ(n)=(p-1)(q-1)=60*52=3120.

3. A在1到3120上随机选择了一个随机数e=17,与3120互素.

4. 计算e对φ(n)的模反元素d,即时,ed-1=kφ(n)。

即使求解:17x+3120y=1.用扩展欧几里得算法求解。可以算出一组解(x,y)=(2753,-15),即d=2753. 公钥(3233, 17),私钥(3233,2753)

至此完成计算.

5.2RSA的可靠性

在RSA私钥和公钥生成的过程中,共出现过p,q,n,φ(N),e,d,其中n,e组成公钥,其他的都不是公开的,一旦d泄露,就等于私钥泄露;

那么能不能根据n,e推导出d呢?

1. ed ≡ 1(mod φ(n)) 只有知道e和φ(n),才能算出d

2. φ(n)=(p-1)(q-1) 只有知道p和q,才能算出φ(n)

3.n=pq,只有将n分解才能算出p和q

所以,只有将n素因数分解,才能算出d; 也就意味着私钥破译. 但是,大整数的质因数分解是非常困难的. 所以理论上来说,如果我们找到

了快速对大整数进行质因数分解的方法,那么RSA加密也就没什么安全性可言了;遗憾的是,目前数学上并没有找到这样快速的质因数分解方法.

5.3 RSA的加密过程

假设A要向B发送加密信息m,他就要用B的公钥(n,e)对m进行加密,但m必须是整数(字符串可以取ascii值或unicode值),且m必须小

于n. 所谓加密就是计算下式的c:

m^e ≡ c (mod n)

假设m=65,B的公钥(3233,17),所以等式如下:

65^17≡2790(mod 3233)

所以c等于2790,A就把2790发给B.

5.4 RSA的解密过程

B收到A发来的2790后,就用自己的私钥(3233,2755)进行解密

c^d ≡ m (mod n)

也就是c的d次方除以n的余数就是m

2790^2753 ≡ 65 (mod 3233)

因此得到原文65.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值