Untitled
unknown
plain_text
2 years ago
1.2 kB
3
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...