Подтвердить что ты не робот

Python 3.3 - объекты Unicode должны быть закодированы перед хэшированием

Возможный дубликат:
Python hashlib problem" TypeError: объекты Unicode должны быть закодированы перед хэшированием

Вот код в Python 3, который генерирует пароль с солью:

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)

Ошибка, которую он мне дает:

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

Мне не разрешено изменять алгоритм генерации пароля, поэтому я хочу исправить ошибку, используя, вероятно, метод encode('utf-8'). Как я могу это сделать?

4b9b3361

Ответ 1

Просто вызовите метод, который вы уже упоминали в строках pw и salt:

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