
Contenu du fichier carotte-radis-tomate.py
:
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
key = os.urandom(32)
print("carotte = ", int.from_bytes(key) % 17488856370348678479)
print("radis = ", int.from_bytes(key) % 16548497022403653709)
print("tomate = ", int.from_bytes(key) % 17646308379662286151)
print("pomme = ", int.from_bytes(key) % 14933475126425703583)
print("banane = ", int.from_bytes(key) % 17256641469715966189)
flag = open("flag.txt", "rb").read()
E = AES.new(key, AES.MODE_ECB)
enc = E.encrypt(pad(flag, 16))
print(f"enc = {enc.hex()}")
Contenu du fichier output.txt
:
carotte = 392278890668246705
radis = 4588810924820033807
tomate = 17164682861166542664
pomme = 12928514648456294931
banane = 5973470563196845286
enc = 2da1dbe8c3a739d9c4a0dc29a27377fe8abc1c0feacc9475019c5954bbbf74dcedce7ed3dc3ba34fa14a9181d4d7ec0133ca96012b0a9f4aa93c42c61acbeae7640dd101a6d2db9ad4f3b8ccfe285e0d
Script pour retrouver enc
:
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from sympy.ntheory.modular import crt
# Modulos et résidus (dans l'ordre)
mods = [
17488856370348678479,
16548497022403653709,
17646308379662286151,
14933475126425703583,
17256641469715966189
]
residues = [
392278890668246705,
4588810924820033807,
17164682861166542664,
12928514648456294931,
5973470563196845286
]
# Reconstruction de la clé avec le CRT
k, N = crt(mods, residues)
# Convertir l'entier en 32 bytes
key = int(k).to_bytes(32, byteorder='big')
# Chiffrement donné (hex)
enc = bytes.fromhex("2da1dbe8c3a739d9c4a0dc29a27377fe8abc1c0feacc9475019c5954bbbf74dcedce7ed3dc3ba34fa14a9181d4d7ec0133ca96012b0a9f4aa93c42c61acbeae7640dd101a6d2db9ad4f3b8ccfe285e0d")
# Déchiffrer
cipher = AES.new(key, AES.MODE_ECB)
plaintext = unpad(cipher.decrypt(enc), 16)
print("Flag:", plaintext.decode())
Flag :
FCSC{2c4c4b3be7d86e1642ce6a8bf1bd75f33b9736e5943f51a49fb9327e248c3b6a}