2016-04-25 21 views
-1

Ich verwende pycrypto Modul für AES-Verschlüsselung. Und unter Verwendung der Dokumentation habe ich die untenstehende Funktion aufgeschrieben, aber es gibt Fehler IV must be 16 bytes long, aber ich verwende 16 Byte lang IV. dieseIV muss 16 Bytes lang sein Fehler in AES-Verschlüsselung

def aes_encrypt(plaintext): 
    """ 
    """ 
    key = **my key comes here** 
    iv = binascii.hexlify(os.urandom(16)) # even used without binascii.hexlify) 

    aes_mode = AES.MODE_CBC 

    obj = AES.new(key, aes_mode, iv) 

    ciphertext = obj.encrypt(plaintext) 
    return ciphertext 
+0

es ohne die hexlify funktionieren sollte. Versuchen Sie es erneut und sehen Sie, ob Sie die gleiche Fehlermeldung erhalten. – interjay

+0

Das Entfernen von 'binascii.hexlify' behebt es für mich. –

+0

nop, es funktioniert nicht – user5594493

Antwort

3

Verwendung:

from Crypto.Cipher import AES 
import binascii,os 

def aes_encrypt(plaintext): 
    key = "00112233445566778899aabbccddeeff" 
    iv = os.urandom(16) 
    aes_mode = AES.MODE_CBC 
    obj = AES.new(key, aes_mode, iv) 
    ciphertext = obj.encrypt(plaintext) 
    return ciphertext 

Arbeiten wie folgt:

>>> aes_encrypt("TestTestTestTest") 
'r_\x18\xaa\xac\x9c\xdb\x18n\xc1\xa4\x98\xa6sm\xd3' 
>>> 

Das ist der Unterschied:

>>> iv = binascii.hexlify(os.urandom(16)) 
>>> iv 
'9eae3db51f96e53f94dff9c699e9e849' 
>>> len(iv) 
32 
>>> iv = os.urandom(16) 
>>> iv 
'\x16fdw\x9c\xe54]\xc2\x12!\x95\xd7zF\t' 
>>> len(iv) 
16 
>>> 
+0

Vielen Dank, die Len() hilft, das Problem zu debuggen – user5594493

+0

IT akzeptiert nur Eingabe von mehreren 16? 'Eingabezeichenfolgen müssen ein Vielfaches von 16 sein. – user5594493

+0

@ user5594493 Ja, die Eingabedauer einer Chiffre muss mit ihrer Blockchiffre übereinstimmen. (16 Byte für AES 128). Bei kleineren Eingängen müssen Sie die Eingabe mit einem Datenfeld puffern (vielleicht mit '00') – EbraHim

Verwandte Themen