概述
xorxorxor是Hack The Box网站CTF挑战的密码学题目,题目地址https://app.hackthebox.eu/challenges/xorxorxor
题目
点击下载附件,解压缩得到challenge.py和output.txt两个文件
challenge.py
#!/usr/bin/python3
import os
flag = open('flag.txt', 'r').read().strip().encode()
class XOR:
def __init__(self):
self.key = os.urandom(4)
def encrypt(self, data: bytes) -> bytes:
xored = b''
for i in range(len(data)):
xored += bytes([data[i] ^ self.key[i % len(self.key)]])
return xored
def decrypt(self, data: bytes) -> bytes:
return self.encrypt(data)
def main():
global flag
crypto = XOR()
print ('Flag:', crypto.encrypt(flag).hex())
if __name__ == '__main__':
main()
output.txt
Flag: 134af6e1297bc4a96f6a87fe046684e8047084ee046d84c5282dd7ef292dc9
思路
题目给出了加密代码和密文,加密代码可以看出是循环4字节密钥的异或,根据题目要求,密文解密后的明文前几位是确定的,即HTB{
因此,根据明文前4位和密文前4位求出密钥,然后根据密文和密钥解密得到完整的明文。
代码
from itertools import cycle
cipher = '134af6e1297bc4a96f6a87fe046684e8047084ee046d84c5282dd7ef292dc9'
cipher = bytes.fromhex(cipher)
m = b'HTB{'
key = [x ^ y for x, y in zip(cipher[:4], m)]
m = [x ^ y for x, y in zip(cipher, cycle(key))]
print(bytes(m))