BUU Crypto[29-32]

还原大师

解题思路

明文: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即可
解析公钥文件方式:

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}

总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值