还原大师
解题思路
明文:TASC?O3RJMV?WDJKX?ZM
MD5码:E903???4DAB???08???51?80??8A?
很明显一个爆破,通过残缺的MD5码进行筛选,exp如下:
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode())
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print(des.upper())
得到flag:flag{E9032994DABAC08080091151380478A2}
总结
无
异性相吸
解题思路
依据题目推断,可能是对字符串之间进行异或,exp如下:
key = 'asadsasdasdasdasdasdasdasdasdasdqwesqf'
with open(r'./cipher.txt', 'r') as f:
m = f.read()
c = ''
for i in range(len(key)):
c += chr(ord(m[i]) ^ ord(key[i]))
print(c)
得到flag:flag{ea1bc0988992276b7f95b54a7435e89e}
总结
多从题目字眼推断考点,猜测出题人意思
RSA
解题思路
解析pub.key得到
N:8693448229604811919066606200349480058890565601720302561721665405
8378322103517
e:65537
然后分解N,查询factor.db得到N的分解:
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
接下来正常解密即可
import gmpy2
from Crypto.Util.number import *
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
N = 86934482296048119190666062003494800588905656017203025617216654058378322103517
e = 65537
d = gmpy2.invert(e,(p - 1) * (q - 1))
s = open("flag.enc","rb")
c= bytes_to_long(s.read())
m = pow(c,d,N)
print(long_to_bytes(m))
得到flag:flag{decrypt_256}
解题思路
通过公钥文件获取N和e,接下来和常规的一样,分解N再求
ϕ
(
N
)
\phi(N)
ϕ(N)和d,最后求m即可
解析公钥文件方式:
- openssl rsa -pubin -text -modulus -in warmup -in pubkey.pem
- 公钥在线解析
RSAROLL
解题思路
data.txt:
{920139713,19}
704796792
752211152
274704164
18414022
368270835
483295235
263072905
459788476
483295235
459788476
663551792
475206804
459788476
428313374
475206804
459788476
425392137
704796792
458265677
341524652
483295235
534149509
425392137
428313374
425392137
341524652
458265677
263072905
483295235
828509797
341524652
425392137
475206804
428313374
483295235
475206804
459788476
306220148
看到后很懵逼,推测一下第一行是N和e,接下来的都是密文,分解N得到
p= 18443
q= 49891
常规解密发现前四行是f、l、a、g,所以最后应该是拼接起来就行了,exp:
import gmpy2
from Crypto.Util.number import long_to_bytes
list1=[704796792,
752211152,
274704164,
18414022,
368270835,
483295235,
263072905,
459788476,
483295235,
459788476,
663551792,
475206804,
459788476,
428313374,
475206804,
459788476,
425392137,
704796792,
458265677,
341524652,
483295235,
534149509,
425392137,
428313374,
425392137,
341524652,
458265677,
263072905,
483295235,
828509797,
341524652,
425392137,
475206804,
428313374,
483295235,
475206804,
459788476,
306220148]
flag=""
n=920139713
q=18443
p=49891
e=19
for i in list1:
c=i
d = gmpy2.invert(e, (p - 1) * (q - 1))
m = pow(c, d, n)
string = long_to_bytes(m)
flag+=string.decode()
print(flag)
得到flag:flag{13212je2ue28fy71w8u87y31r78eu1e2}
总结
无