CyberSecurityRumble | HashFun

from secret import FLAG

def hashfun(msg):
    digest = []
    for i in range(len(msg) - 4):
        digest.append(ord(msg[i]) ^ ord(msg[i + 4]))
    return digest

print(hashfun(FLAG))
# [10, 30, 31, 62, 27, 9, 4, 0, 1, 1, 4, 4, 7, 13, 8, 12, 21, 28, 12, 6, 60]

平文の先頭はおそらくCSR{なのでやるだけ

from ptrlib import xor

keys = list(b"CSR{")
ciphers = [10, 30, 31, 62, 27, 9, 4, 0, 1, 1, 4, 4, 7, 13, 8, 12, 21, 28, 12, 6, 60]

for i in range(len(ciphers)):
    k = ciphers[i] ^ keys[i]
    keys.append(k)

print(xor(bytes(keys), bytes(ciphers)))