Python 3.3-Los objetos Unicode deben codificarse antes de hacer hashing
python-3.x (1)
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 <module>
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