RSA加解密原理

RSA安全原理:基于大整数N分解难。一般N>2048 bits。

1.算法原理

msg:明文

cipher:密文

公钥:N, e, 1< e < φ(N),且e与φ(N) 互质

私钥: p, q, d (p, q为素数)

欧拉函数:

求私钥d:

加密过程:

解密过程:

算法正确性证明:

也就是要证明

分情况讨论:

  1. gcd(msg, N) = 1

由欧拉定理得

由同余的乘法性质可知

所以

解密得到的就是明文。

  1. gcd(msg, N) ≠1

,msg为p或者q的倍数。

且易知1 < k < q,q为素数,所以gcd(k, q) = 1

由费马小定理可知:

由同余的乘法性质可知

又因为

那么

也就是说

转化形式后

由此可知,t*q是能整除k*p的,又因为q是素数,那么t就能整除p

所以

2.简单RSA加解密

题目描述
2^16+1
p = 1619457011962613889034092691100138481201392787160018861588882624360276930879984504721332613
q = 1930644580807360024179365101463872960800671765127817730222044332809690977077925368011467259
c = 591746946043509417154408651370020140882201187961060440894988228260125420535482616849793702495189458033191552493861512032310747532849126740960428065188251472016781567743780417376053

已知p,q,c,是没法求出msg的,推测2^16+1应该是e的值。e常设置为65537,0x10001(十六进制),和题目给的是一样的。

phi = (p - 1)*(q - 1)
d = invert(e, phi)
m = pow(c, d, p * q)
print(n2s(m))

将m转换为string就可以得到flag。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值