RSA已知n、e、密文c,求明文。

题目文件

from Crypto.Util.number import *

flag = b''
m = bytes_to_long(flag)
p = getPrime(128)
q = getPrime(128)
phi = (p - 1) * (q - 1)
n = p * q
e = 65537
c = pow(m, e, n)

print(f"n: {n}")
print(f"e: {e}")
print(f"c: {c}")

'''
n: 82262302255673546896068943571445089014908011317331238957390324506176165692353
e: 65537
c: 74363314827014337197228165426657527588061111803487873351317699624723182579082
'''

操作内容:

该题目属于已知n、e、密文c,求明文。

n值可以通过分解质因数得到p、q值。

  1. 使用yafu分解工具

将n值存入txt文档内

注意:

(1)n为十进制

(2)txt文件结尾必须有一个换行符,如下图:

 

(3)该命令会删除这个txt,请注意保存。

  1. 使用分解命令  yafu-x64 "factor(@)" -batchfile 1.txt

得到p、q值如下

解题代码 

 

from Crypto.Util.number import *

from gmpy2 import *

p = 295550294274400439200910843028567835583

q = 278336052608690728674410932689178712191

n = 82262302255673546896068943571445089014908011317331238957390324506176165692353

e = 65537

c = 74363314827014337197228165426657527588061111803487873351317699624723182579082

phi = (p-1) * (q-1)

d = inverse(e, phi)

m = pow(c, d, n)

print(long_to_bytes(m))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值