小明文攻击

runwu2204 Lv6

小明文攻击的要求是e足够小

因为存在这个关系

1
2
3
4
m^e=c mod n
所以有
m^e=k*n + c k为整数
m = (k*n+c)^(1/e)

同时因为e足够小所以k足够小,可以通过穷举k来获得明文m

exp:

1
2
3
4
5
6
for e in range(1,5):#遍历e,已知e可以不用遍历
for k in range(2000):#遍历k
import Crypto.Util.number
if __import__("gmpy2").iroot((k*n+flag),e)[1]:
if b"NSSCTF" in Crypto.Util.number.long_to_bytes(__import__("gmpy2").iroot((k*n+flag),e)[0]):#条件判断
print(Crypto.Util.number.long_to_bytes(__import__("gmpy2").iroot((k*n+flag),e)[0]))

[SWPUCTF 2021 新生赛]crypto5 | NSSCTF

1
2
3
4
5
6
7
8
9
10
11
12
from gmpy2 import *
from Crypto.Util.number import *
import sympy
import math
flag= 25166751653530941364839663846806543387720865339263370907985655775152187319464715737116599171477207047430065345882626259880756839094179627032623895330242655333
n= 134109481482703713214838023035418052567000870587160796935708584694132507394211363652420160931185332280406437290210512090663977634730864032370977407179731940068634536079284528020739988665713200815021342700369922518406968356455736393738946128013973643235228327971170711979683931964854563904980669850660628561419
for k in range(2000):
import Crypto.Util.number
for e in range(1,5):
if __import__("gmpy2").iroot((k*n+flag),e)[1]:
if b"NSSCTF" in Crypto.Util.number.long_to_bytes(__import__("gmpy2").iroot((k*n+flag),e)[0]):
print(Crypto.Util.number.long_to_bytes(__import__("gmpy2").iroot((k*n+flag),e)[0]))
  • 标题: 小明文攻击
  • 作者: runwu2204
  • 创建于 : 2023-07-15 21:33:02
  • 更新于 : 2023-07-15 22:25:41
  • 链接: https://runwu2204.github.io/2023/07/15/Crypto/RSA/小明文攻击/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
小明文攻击