Sie haben nicht angegeben, aber Ihr Code sieht so aus, als ob Sie den ECB-Modus verwenden. Hier ist ein kurzes Beispiel für Code, den ich für die Cryptopals-Challenge geschrieben habe, leicht modifiziert, um besser zu Ihrem Beispielcode zu passen. Stellen Sie sicher, dass Ihr Schlüssel 16 Byte lang ist. Außerdem muss der Klartext ein Vielfaches von 16 Byte sein. Eine weitere Herausforderung besteht darin, eine Padding-Funktion zu implementieren.
Eine andere Sache zu beachten ist, dass nach der Verschlüsselung Ihrer Daten, die sicherste Art zu speichern, dass in einer Art von Codierung ist, in der Regel Base64 verwendet wird. Wenn Sie dann entschlüsseln, entschlüsseln Sie base64 zuerst die Daten.
from Crypto.Cipher import AES
import base64
def ecb_encrypt(message, key):
""" Encrypts a message in AES ECB mode with a given key
ACCEPTS: Two strings, the plaintext message and the key
RETURNS: A bytes string of base64 encoded ciphertext
"""
aes = AES.new(key, AES.MODE_ECB)
return base64.b64encode(aes.encrypt(message)).decode()
def ecb_decrypt(encrypted, key):
""" Decrypts a ciphertext in AES ECB mode with a given key
ACCEPTS: Two strings, the base64 encoded ciphertext and the key
RETURNS: A bytes string of the plaintext message
"""
aes = AES.new(key, AES.MODE_ECB)
return aes.decrypt(base64.b64decode(encrypted))
if __name__ == "__main__":
Key = "0000000000000000"
plain_text = "1010101110101011"
cipher_text = ecb_encrypt(plain_text, Key)
decrypted_pt = ecb_decrypt(cipher_text, Key).decode()
print("Original message: {}".format(plain_text))
print("Encrypted message: {}".format(cipher_text))
print("Decrypted message: {}".format(decrypted_pt))