2016-06-30 10 views
0

私はいくつかのPythonコードを有する、Pythonのhashlib.sha256()ダイジェストの長

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) 

しかし、私はエラーを持っている - とValueError:AESキーは、16、24、または32バイト長のいずれかでなければならない

しかし、私は32bytesキーではなく、16bytesキーが必要です。 hash_val = hashfct.digest()が32bytesでない理由は分かりません また、hash_val = hashfct.digest()[0:32]を試しましたが、それはうまくいきません。

どのようにして32バイトの長いキーを取得できますか?

ありがとうございました。

答えて

0

私は同じ問題を抱えていたので、私は本当に理由は分からないが、これは動作しますdigest方法

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) 

を使用する必要があります。

1

実際には独自のキー導出アルゴリズムを検討する必要があります。 PBKDF2は、通常の間違いからあなたを守るより一般的なアルゴリズムの1つです。たとえば、あなたのケースでは、ハッシュのラウンドが1回しかないので、パスワードを強制的に入力するのは非常に簡単です。ここで

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' 

あなたはまたb'salt'は、新しいキーを生成するたびにランダムで異なっていることを確認しなければなりません。 Pythonで暗号化された安全なランダム機能については、How can I create a random number that is cryptographically secure in python?

これは、Python 3のためですが、Pythonの2

を調整するのに十分なシンプルでなければなりませんを参照してください
関連する問題