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异或得出。
R2=R0K1L0K1K2,由此可见第八轮的R7也只和R0,L0线性相关。
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}