Untitled
unknown
plain_text
2 years ago
1.2 kB
2
Indexable
da46dbb077d89465c8928ab5d47e97c78a97cf7db5ce77d9d549d8 import os from typing import Tuple def bit_partition(n: int) -> Tuple[int, int]: return (n >> 4), (n & 0x0F) def encrypt_symbol(n: int, key1: int, key2: int) -> int: m, l = bit_partition(n) e = (((m + key1) % 16) << 4) | ((l + key2) % 16) return e def encrypt_flag(flag: str, alpha: str) -> str: assert all(x in alpha for x in flag) otp = int(os.urandom(1).hex(), 16) upper_bits, lower_bits = bit_partition(otp) cipher = [] for i, ch in enumerate(flag): if i % 3 == 0: enc = encrypt_symbol(ord(ch), upper_bits, lower_bits) elif i % 3 == 1: enc = encrypt_symbol(ord(ch), lower_bits, upper_bits) else: enc = encrypt_symbol(ord(ch), upper_bits, upper_bits) cipher.append(enc) cipher = bytes(cipher).hex() return cipher if __name__ == "__main__": secret_flag = open('flag.txt').read().lstrip('Z10N{').rstrip('}') alpha = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_' encrypted_flag = encrypt_flag(secret_flag, alpha) open('out.txt', 'w').write(f'{encrypted_flag}')
Editor is loading...