2016-06-30 13 views
0

Ich habe einige Python-Code,Python hashlib.sha256() digest Länge

hash_object = hashlib.sha256(b'Hello World') 
hex_dig = hash_object.hexdigest() 

cipher = AES.new(hex_dig, AES.MODE_CBC, iv) 
plain = cipher.decrypt(cipher) 

aber ich habe einen Fehler - Valueerror: AES-Schlüssel muss entweder 16, 24 oder 32 Bytes lang sein

Aber ich möchte 32bytes Schlüssel, nicht 16bytes Schlüssel. Ich weiß nicht, warum hash_val = hashfct.digest() ist nicht 32bytes Ich habe auch versucht "hash_val = hashfct.digest() [0:32]", aber es ist auch nicht funktionieren.

Wie kann ich den 32byte langen Schlüssel bekommen?

Danke.

Antwort

0

müssen Sie die digest Methode verwenden

hash_object = hashlib.sha256(b'Hello World') 
hex_dig = hash_object.digest() 

cipher = AES.new(hex_dig, AES.MODE_CBC, iv) 
plain = cipher.decrypt(cipher) 

Ich weiß nicht wirklich der Grund, aber das funktioniert, weil ich hatte das gleiche Problem.

1

Sie sollten wirklich einen richtigen Schlüsselableitungsalgorithmus in Betracht ziehen, anstatt Ihren eigenen zu rollen. PBKDF2 ist einer der häufigeren Algorithmen, die Sie vor einigen der üblichen Fehler schützen sollten. Zum Beispiel ist es in Ihrem Fall sehr einfach, das Passwort brutal zu erzwingen, weil Sie nur eine Runde Hashing haben.

Hier sind einige modifizierte Beispielcode von hashlib:

>>> import hashlib 
>>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000) 
>>> dk[:32] 
b'\x03\x94\xa2\xed\xe32\xc9\xa1>\xb8.\x9b$c\x16\x04\xc3\x1d\xf9x\xb4\xe2\xf0\xfb\xd2\xc5I\x94O\x9dy\xa5' 

Sie sollten auch sicherstellen, b'salt' zufällig und ist jedes Mal anders Sie einen neuen Schlüssel erzeugen. Für eine kryptografisch sichere Zufallsfunktion in Python finden How can I create a random number that is cryptographically secure in python?

Die für Python 3, sondern sollte einfach genug sein, für Python 2.

anpassen