Advertisement

BUUCTF Crypto 7

阅读量:

RSA

通过加压手段获取到两个文件 pub.key 和 flag.enc。打开 pub.key 后发现其为公钥,并通过在线解析工具进行解析:

在这里插入图片描述

得到n和e
在拆分n得到p和q

在这里插入图片描述

直接上脚本

复制代码
    import gmpy2
    import rsa
    
    p = 285960468890451637935629440372639283459
    q = 304008741604601924494328155975272418463
    e = 65537
    n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
    
    d = gmpy2.invert(e,(q-1)*(p-1))
    print(d)
    
    d = 81176168860169991027846870170527607562179635470395365333547868786951080991441
    
    key = rsa.PrivateKey(n,e,d,p,q)
    print(key)
    
    with open("flag.enc","rb") as f:
    	print(rsa.decrypt(f.read(),key).decode())

RSAROLL

解压操作完成后生成了两个新的txt文件;题目前面标有提示标记;其中最为关键的是data.txt;打开查看后发现

在这里插入图片描述

n与e的第一行。基于rsa算法的基本原理进行分析,在线网站上解析这些数值应当对应于密文c,并解密得到明文m。通过在线解析工具获取素数p与q,并对data.txt文件进行修改后上至脚本执行处理

复制代码
    import gmpy2
    n=920139713
    q=18443
    p=49891
    e=19
    d=gmpy2.invert(e,(p-1)*(q-1))
    res=[]
    with open('data.txt','rb') as f:
    for i in f:
        res.append(chr(pow(int(i),d,n)))
    print("".join(res))

运行得到flag。

还原大师

在这里插入图片描述

md5碰撞
三个未知能暴力破解
将所有可打印字符考虑进去

复制代码
    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("utf-8"))
            des=m.hexdigest()
            if 'e903' in des and '4dab' in des and '80' in des and '08' in des and '51' in des:
                print ('flag{'+des+'}')  #TASCJO3RJMVKWDJKXLZM
                print('i=',chr(i),'j=',chr(j),'k=',chr(k))#JKL

运行得到flag

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~