HackTheBox-xorxorxor

概述

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))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值