题目源码:
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
'''