AES-256-Verschlüsselung mit PyCrypto über den CBC-Modus - keine Schwächen?
Habe ich das folgende python-Skript zum verschlüsseln/entschlüsseln von Daten mithilfe von AES 256, könnten Sie mir bitte sagen, ob es etwas im code, kann die Verschlüsselung schwach ist, oder wenn es etwas gibt, dass habe ich nicht berücksichtigt, der für die AES-256-Verschlüsselung mit CBC-Modus? Getestet hab ich das script und es funktioniert gut, es ist das verschlüsseln und entschlüsseln von Daten, sondern wollte nur eine zweite Meinung. Danke.
from Crypto.Cipher import AES
from Crypto import Random
BLOCK_SIZE = 32
INTERRUPT = u'\u0001'
PAD = u'\u0000'
def AddPadding(data, interrupt, pad, block_size):
new_data = ''.join([data, interrupt])
new_data_len = len(new_data)
remaining_len = block_size - new_data_len
to_pad_len = remaining_len % block_size
pad_string = pad * to_pad_len
return ''.join([new_data, pad_string])
def StripPadding(data, interrupt, pad):
return data.rstrip(pad).rstrip(interrupt)
SECRET_KEY = Random.new().read(32)
IV = Random.new().read(16)
cipher_for_encryption = AES.new(SECRET_KEY, AES.MODE_CBC, IV)
cipher_for_decryption = AES.new(SECRET_KEY, AES.MODE_CBC, IV)
def EncryptWithAES(encrypt_cipher, plaintext_data):
plaintext_padded = AddPadding(plaintext_data, INTERRUPT, PAD, BLOCK_SIZE)
encrypted = encrypt_cipher.encrypt(plaintext_padded)
return encrypted
def DecryptWithAES(decrypt_cipher, encrypted_data):
decoded_encrypted_data = encrypted_data
decrypted_data = decrypt_cipher.decrypt(decoded_encrypted_data)
return StripPadding(decrypted_data, INTERRUPT, PAD)
our_data_to_encrypt = u'abc11100000'
encrypted_data = EncryptWithAES(cipher_for_encryption, our_data_to_encrypt)
print ('Encrypted string:', encrypted_data)
decrypted_data = DecryptWithAES(cipher_for_decryption, encrypted_data)
print ('Decrypted string:', decrypted_data)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gesehen hab ich den code über das internet gebucht. Es gibt - im Prinzip - nicht zu viele Dinge falsch mit ihm, aber es gibt keine Notwendigkeit zu erfinden, Ihre eigenen Polsterung. Außerdem sehe ich nicht ein, warum die erste Polsterung Charakter heißt INTERRUPT. Ich nehme an, daß INTERRUPT-und PAD-behandelt wird als ein einzelnes byte (ich bin kein Python-Experte).
Den häufigsten padding nach PKCS#5 padding. Es besteht aus N bytes mit dem Wert der Anzahl der padding-bytes. Die Polsterung verwendet, hier sieht mehr aus wie 'ISO' - Polsterung, die aus einem einzigen bit auf 1 gesetzt, um die Unterscheidung von Daten und anderen padding-bits, und der rest ist null. Das wäre Codepunkt \u0080 im code.
Also die Verschlüsselung (was kann die Vertraulichkeit von Daten) scheint korrekt verwendet werden. Es kommt auf den Anwendungsfall, wenn Sie müssen auch Schutz der Integrität und/oder-Authentifizierung, z.B. mit einem MAC oder HMAC. Natürlich, keine gesetzlichen Garantien oder irgendetwas zur Verfügung gestellt.