[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异或得出。

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值