easy_real复现

题目源码:

import random
import hashlib

flag = 'xxxxxxxxxxxxxxxxxxxx'
key = random.randint(1,10)
for i in range(len(flag)):
    crypto += chr(ord(flag[i])^key)
m = crypto的ascii十六进制
e = random.randint(1,100)
print(hashlib.md5(e))
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
n = p*q
c = pow(m,e,n)
print(n)
print(c)
#37693cfc748049e45d87b8c7d8b9aacd
#4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
#3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397

//print(hashlib.md5(e))

#37693cfc748049e45d87b8c7d8b9aacd

可以用md5解出e的值为23:

求出密文m的值:

import random
import hashlib
import math
import gmpy2

 
n=4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
c=3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q=n//p
e=23
phi=(q-1)*(p-1)
d=inverse(e,phi)
m = pow(c, d, n)  
print(m);
//m=2976168736142380455841784134407431434784057911773423743751382131043957
//m="ndios_;9kgE;WK8e;W?gWn<\;k|nu"

暴力破解key用密文解密解出flag:

import random
import hashlib
import math
import gmpy2

n=4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
c=3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q=n//p
e=23
phi=(q-1)*(p-1)
d=gmpy2.invert(e,phi)
m = pow(c, d, n)  
print(m);
m="ndios_;9kgE;WK8e;W?gWn<\;k|nu"
for key in range(11):
  flag=""
  for i in range(len(m)):
    flag+=chr(ord(m[i])^key)
  print(flag)
'''
ndios_;9kgE;WK8e;W?gWn<\;k|nu
oehnr^:8jfD:VJ9d:V>fVo=]:j}ot
lfkmq]9;ieG9UI:g9U=eUl>^9i~lw
mgjlp\8:hdF8TH;f8T<dTm?_8hmv
j`mkw[?=ocA?SO<a?S;cSj8X?oxjq
kaljvZ><nb@>RN=`>R:bRk9Y>nykp
hboiuY=?maC=QM>c=Q9aQh:Z=mzhs
icnhtX<>l`B<PL?b<P8`Pi;[<l{ir
flag{W31coM3_C0m3_7o_f4T3ctf}
gm`fzV20bnL2^B1l2^6n^g5U2bug|
dnceyU13amO1]A2o1]5m]d6V1avd
'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T1M@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值