Criptage course
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# -------------------------------
# 1️⃣ Génération de la clé AES (256 bits) et IV
# -------------------------------
KEY_AES = get_random_bytes(32) # Clé secrète de 256 bits
def generate_iv():
return get_random_bytes(12) # IV de 12 octets pour AES-GCM et AES-
CTR
# -------------------------------
# 2️⃣ Chiffrement des télécommandes (TC) avec AES-GCM
# -------------------------------
def encrypt_tc_aes_gcm(tc_data):
iv = generate_iv()
cipher = AES.new(KEY_AES, AES.MODE_GCM, nonce=iv)
ciphertext, mac = cipher.encrypt_and_digest(tc_data.encode())
return iv + ciphertext + mac # Paquet sécurisé : IV + données chiffrées
+ MAC
def decrypt_tc_aes_gcm(encrypted_tc):
iv = encrypted_tc[:12]
ciphertext = encrypted_tc[12:-16]
mac = encrypted_tc[-16:]
cipher = AES.new(KEY_AES, AES.MODE_GCM, nonce=iv)
try:
decrypted_data = cipher.decrypt_and_verify(ciphertext, mac)
return decrypted_data.decode()
except ValueError:
return "Erreur : Intégrité des données compromise !"
# -------------------------------
# 3️⃣ Chiffrement des télémétries (TM) avec AES-CTR
# -------------------------------
def encrypt_tm_aes_ctr(tm_data):
iv = generate_iv()
cipher = AES.new(KEY_AES, AES.MODE_CTR, nonce=iv)
ciphertext = cipher.encrypt(tm_data.encode())
return iv + ciphertext # Paquet sécurisé : IV + données chiffrées
def decrypt_tm_aes_ctr(encrypted_tm):
iv = encrypted_tm[:12]
ciphertext = encrypted_tm[12:]
cipher = AES.new(KEY_AES, AES.MODE_CTR, nonce=iv)
decrypted_data = cipher.decrypt(ciphertext)
return decrypted_data.decode()
# -------------------------------
# 🔄 Test du chiffrement et déchiffrement
# -------------------------------
# 📡 Simulation de l'envoi d'une télécommande TC
tc_message = "Allumer moteur"
encrypted_tc = encrypt_tc_aes_gcm(tc_message)
decrypted_tc = decrypt_tc_aes_gcm(encrypted_tc)
# 📡 Simulation de l'envoi d'une télémétrie TM
tm_message = "Température: 22.5°C"
encrypted_tm = encrypt_tm_aes_ctr(tm_message)
decrypted_tm = decrypt_tm_aes_ctr(encrypted_tm)
# Affichage des résultats
print(f"🔒 Télécommande chiffrée (AES-GCM) : {encrypted_tc.hex()}")
print(f"✅ Télécommande déchiffrée : {decrypted_tc}")
print(f"🔒 Télémétrie chiffrée (AES-CTR) : {encrypted_tm.hex()}")
print(f"✅ Télémétrie déchiffrée : {decrypted_tm}")