2016-06-30 4 views
0

좀 파이썬 코드가,파이썬 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 바이트이어야합니다

하지만, 나는 16bytes 키가 아닌 32bytes 키를 원한다. hash_val = hashfct.digest()가 32bytes가 아닌 이유를 모르겠습니다. 또한 "hash_val = hashfct.digest() [0:32]"를 시도했지만 작동하지 않습니다.

어떻게 32byte의 긴 키를 얻을 수 있습니까?

감사합니다.

답변

0

당신은 정말 이유를 모르는

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) 

digest 방법을 사용해야하지만 같은 문제가 있었기 때문에 이것은 작동합니다.

1

자신의 키 유도 알고리즘 대신 올바른 키 유도 알고리즘을 고려해야합니다. PBKDF2은 일반적인 실수 중 일부를 방지하는보다 일반적인 알고리즘 중 하나입니다. 예를 들어, 한 번의 해싱 만 있기 때문에 무작위로 암호를 입력하는 것은 매우 쉽습니다.

>>> 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'은 새 키를 생성 할 때마다 무작위로 다른 있는지 확인해야합니다 여기

hashlib에서 일부 수정 예제 코드입니다. 파이썬에서, 안전한 암호화 랜덤 기능의 경우, 이것은 파이썬 3입니다 How can I create a random number that is cryptographically secure in python?

볼 수 있지만,

파이썬 2를 조정하기에 충분히 단순해야한다