38 lines
858 B
Python
38 lines
858 B
Python
from Crypto.Cipher import AES
|
|
from Crypto.Util import Counter
|
|
from Crypto.Util.Padding import pad, unpad
|
|
from Crypto.Util.number import bytes_to_long
|
|
import sys
|
|
import os
|
|
|
|
flag = "fakeflag{this_is_super_fake_lol}".encode()
|
|
key = os.urandom(16)
|
|
|
|
def encrypt(pt):
|
|
iv = os.urandom(16)
|
|
ctr = Counter.new(128, initial_value=bytes_to_long(iv))
|
|
cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
|
|
return iv + cipher.encrypt(pad(pt, 16))
|
|
|
|
def decrypt(ct):
|
|
try:
|
|
iv = ct[:16]
|
|
ct = ct[16:]
|
|
ctr = Counter.new(128, initial_value=bytes_to_long(iv))
|
|
cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
|
|
pt = cipher.decrypt(ct)
|
|
unpad(pt, 16)
|
|
return 1
|
|
except Exception as e:
|
|
return 0
|
|
|
|
def main():
|
|
print(encrypt(flag).hex())
|
|
while True:
|
|
try:
|
|
print(decrypt(bytes.fromhex(input("> "))))
|
|
except Exception as e:
|
|
pass
|
|
|
|
main()
|