GDOUCTF-cyrpto-wp

文章详细展示了使用Python进行加密解密的过程,包括单字符替换解密、MD5哈希的暴力破解以及利用Coppersmith方法解决数学问题来解密数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Absolute_Baby_Encrytpion

打开附件发现是单字符替换
在这里插入图片描述
替换回来即可

exp.py
with open("data",'r') as f:
    data = f.read()
# print(data)
import re
decode_char_list = re.findall("case '(.*?)'",data)
encode_char_list = re.findall("encryptedString = encryptedString.concat\('(.*?)'\)",data)
print(encode_char_list)
decode_dict = {}
for k,v in zip(encode_char_list,decode_char_list):
    decode_dict[k] = v
print(decode_dict)
encode_text = """
+}!q")hiim)#}-nvm)i-$#mvn#0mnbm)im#n+}!qnm8)i-$#mvnoc#0nz<$9inm!>-n1:1-nm8)i-$~c58n!}qhij#0[noic##m8nc8n?!8c}w!n]>&
"""
for t in encode_text:
    try:
        print(decode_dict[t],end="")
    except:
        print(t)
babylua

在线跑一下lua 可以知道是标准的md5

exp.py
import random
import hashlib
table = ""
for i in range(65,91):
    table += chr(i)
for i in range(97,123):
    table += chr(i)
# print(table)
def md5(a):
    return hashlib.md5(a.encode()).hexdigest()

target = "b5e62abe84"
def get_key():
    print(len(target))
    for a in table:
        for b in table:
            for c in table:
                for d in table:
                    tmp = a + b + c + d
                    # print(md5(md5(tmp))[0:10],len(md5(md5(tmp))[1:11]))
                    if md5(md5(tmp))[0:10] == target:
                        print(tmp)
                        break
key = md5(md5('kKpU'))
print(key)

data = "200 161 198 157 173 169 199 150 105 163 193 175 173 194 135 131 135 225".split(' ')
enc_data = [int(t,10) for t in data]
for i in range(len(enc_data)):
    print(chr(enc_data[i] - ord(key[i])),end="")

Magic of Encoding

去除假flag 然后转zip

Math Problem

用coppersmith解出x 然后求出kp gcd即可得到p

exp.py
from Crypto.Util.number import *
import gmpy2
e = 65537
n = 79239019133008902130006198964639844798771408211660544649405418249108104979283858140199725213927656792578582828912684320882248828512464244641351915288069266378046829511827542801945752252863425605946379775869602719406340271702260307900825314967696531175183205977973427572862807386846990514994510850414958255877
c = 45457869965165575324534408050513326739799864850578881475341543330291990558135968254698676312246850389922318827771380881195754151389802803398367341521544667542828862543407738361578535730524976113729406101764290984943061582342991118766322793847422471903811686775249409300301726906738475446634950949059180072008
a = 9303981927028382051386918702900550228062240363697933771286553052631411452412621158116514735706670764224584958899184294505751247393129887316131576567242619
b = 9007779281398842447745292673398186664639261529076471011805234554666556577498532370235883716552696783469143334088312327338274844469338982242193952226631913
y = 970090448249525757357772770885678889252473675418473052487452323704761315577270362842929142427322075233537587085124672615901229826477368779145818623466854
R.<x> = PolynomialRing(Zmod(n))
f=y**2-x**3-a*x+-b
f=f.monic()
x0 = f.small_roots(X=2^64, beta=0.4,epsilon=0.01)
print(x0)
x=int(x0[0])
kp=pow(y,2)-b-a*x-x**3
p=gmpy2.gcd(kp,n)
q=n//p
d=gmpy2.invert(e,(p-1)*(q-1))
m=pow(c,d,n)
print(long_to_bytes(int(m)))
#flag{c4edd6d0-d1b3-cbda-95e3-a323edc35be5}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值