Python 3.3 – Los objetos Unicode deben codificarse antes de hacer hashing

Posible duplicado:
Python hashlib problem “TypeError: Los objetos Unicode deben estar codificados antes de hashing”

Aquí hay un código en Python 3 que genera una contraseña con salt:

import hmac import random import string import hashlib def make_salt(): salt = "" for i in range(5): salt = salt + random.choice(string.ascii_letters) return salt def make_pw_hash(pw, salt = None): if (salt == None): salt = make_salt() #.encode('utf-8') - not working either return hashlib.sha256(pw + salt).hexdigest()+","+ salt pw = make_pw_hash('123') print(pw) 

El error que me da es:

 Traceback (most recent call last): File "C:\Users\german\test.py", line 20, in  pw = make_pw_hash('123') File "C:\Users\german\test.py", line 17, in make_pw_hash return hashlib.sha256(pw + salt).hexdigest()+","+ salt TypeError: Unicode-objects must be encoded before hashing 

No se me permite cambiar el algoritmo de generación de una contraseña, por lo que solo quiero corregir el error usando probablemente el método de encode('utf-8') . ¿Cómo puedo hacerlo?

Simplemente llame al método que ya mencionó en las cadenas pw y salt :

 pw_bytes = pw.encode('utf-8') salt_bytes = salt.encode('utf-8') return hashlib.sha256(pw_bytes + salt_bytes).hexdigest() + "," + salt