RSA公钥加密

步骤:
随意选择两个大的质数p和q,p不等于q,计算n=pq。
根据欧拉函数,求得r=(p-1)(q-1)。
选择一个小于r,且与之互质的整数w,求得w关于模r的模反元素,命名为d。(dw mod n = 1)。
将p和q的记录销毁。


公钥:n, w
私钥:n, d


加密:密文c = m^w mod n
解密:明文m = c^d mod n


用到的算法:

1. 求互质:互质定义为如果两个数的两个数的最大公因数为1

int isOpprime(int w, int On)
{
	if(On == 0)
		return w;
	else
		return 	isOpprime(On, w % On);
}

当返回1是互质

 

2.  求模逆:知dw mod n = 1可以简单的使用穷举:dw = nk + 1if nk + 1 mod w == 0;d = nk +1 div w

3.  幂求模:求m^w mod n

由ab mod n = (a mod n) * (b mod n) mod n 即ab = (a mod n)(b mod n) (mod n);

ab mod n = (a - n)(b - n) mod n

先求w的二进制:bn * b(n-1)*...*b1*b0  即 w = b0*2^0 + b1*2^1 +...+b(n-1)*2^(n-1) + bn*2^n

m^w =m ^ (b0*2^0) * m ^ (b0*2^1) * ...* m ^ (b(n-1)*2^(n-1)) * m ^ (bn*2^n(mod n))

令A0 = m (mod n), Ai =( Ai-1) ^ 2 (mod n) 

则m^w = A0 * A1 *...* An(mod n)

A0 = m;

A1 = m^2 mod n;

A2 = A1^2 mod n;

...

当bi = 0, Ai = 1且 Ai < n/2

 

举例:

p = 37, q = 43;

n = pq = 1591;

r = (p-1)(q-1);

取与r互质整数w = 29;则由dw mod r = 1, 求得d = 365;

设明文m = 12394;

密文c = m^w mod n = 1234^29 mod 1591;

w = 29的二进制位11101

A0 = 1234(> 1591/2 = 795)(mod 1591)

     = 1234 - 1591 = -357(mod 1591)

A1 = (-357)^2 = 169(mod 1591)

A2 = 169^2 = 1514(> 1591/2 = 795)(mod 1591)

     = 1514 - 1591 = -77(mod 1591)

A3 = (-77)^2 = 1156 = -435(mod 1591)

A4 = (-435)^2 = 1487 = -104(mod 1591)

c = (-357)*(-77)*(-435)*(-104) = 442*(-435)*(-104) = 241*(-104) = 392(mod 1591)

 

由c = 392, d = 365,也可逆推m = 1234,略

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值