[dasctf]crypto

from Crypto.Util.strxor import strxor as xor
import os
import uuid
flag = ("flag{" + str(uuid.uuid4())[:-10] + "}")
print(len(flag))
def round(s, k,k2):
    l, r = s[:16], s[16:]
    l_, r_ = xor(xor(r, k), l), xor(xor(l,k),k2)
    return l_ + r_

def encode(s, k):
    t = s
    for i in range(8):
        t = round(t, k[i],k[7-i])
    return t

r = os.urandom(32)
print(r)

key = [os.urandom(16) for _ in range(8)]

print(encode(r, key))
m = flag.encode()
print(encode(m, key))
"""
b"x\xa0\x9b\xbb'\xb4\x05\x02\xdd\xd2\xa7t\x9c\x1c]-c\x86F\xbd\xe4\xefUg\xca\xd8 \x97\x0ev\x01\x16"
b'c\x86F\xbd\xe4\xefUg\xca\xd8 \x97\x0ev\x01\x16\x91>\xff\xd5\x1b\x8b\x05\x97G\x10\xfe.o\x91\xd03'
b'c4-4558-bfb9-9e}\x8f@n\x80\x96\x86Z\xed\x00Ix\xc2\xb6\xef\xdfL'
"""

wp

有点像feistel结构的加密,但手算R9=R1L1K1K2K4K5K7(xor关系)

而K1K2K4K5K7可由m1,c1异或得出。

m1=b"x\xa0\x9b\xbb'\xb4\x05\x02\xdd\xd2\xa7t\x9c\x1c]-c\x86F\xbd\xe4\xefUg\xca\xd8 \x97\x0ev\x01\x16"
c1=b'c\x86F\xbd\xe4\xefUg\xca\xd8 \x97\x0ev\x01\x16\x91>\xff\xd5\x1b\x8b\x05\x97G\x10\xfe.o\x91\xd03'
flag=b'c4-4558-bfb9-9e}\x8f@n\x80\x96\x86Z\xed\x00Ix\xc2\xb6\xef\xdfL'

from Crypto.Util.strxor import strxor as xor
key=xor(xor(c1[16:],m1[:16]),m1[16:])
x=xor(xor(flag[16:],flag[:16]),key)
print(x)
print(x+flag[:16])
# flag{c7225c6f-69c4-4558-bfb9-9e}

你可能感兴趣的:(python,ctf,crypto)