2015-05-24 2 views
1

Я хэширование пароля следующим образом:Проверьте урезанный пароль

mysalt = os.urandom(12).encode('hex') 
passhash = mysalt + pw 
hash = str(pbkdf2_sha256.encrypt(passhash)) 

Как я могу проверить этот пароль с записью пользователя? Ниже приводится следующее:

hash3 = str(pbkdf2_sha256.encrypt(passhash)) 

... возвращает совершенно другое значение.

Заранее спасибо.

+0

Трудно иметь смысл от этого кода, если не добавить форматирование. – arkascha

+0

Надеюсь, вы используете ту же соль и не пытаетесь с новой солью. –

ответ

0

Убедитесь, что вы используете ту же соль, когда вы храните пароль, как при его проверке: passhash Значения с разными солями приведут к разным хэшам.

Вы можете использовать одну соль для каждого пароля (более удобно), использовать и хранить различную соль для каждого пользователя (более безопасную) или их комбинацию.


Edit: Вы не указали, какую библиотеку вы использовали, чтобы получить pbkdf2_sha256. Возможно, эта библиотека может самостоятельно решать задачи, связанные с солью. PassLib, например, будет генерировать соль для вас и включать ее в результат. Он предлагает метод verify для проверки ввода пользователя на этот результат.

0

Проконсультирует против сравнения полученных строк - часто кодирование мешает. Попробуйте сравнить фактические байты.

0

решение:

import os 
from passlib.hash import pbkdf2_sha256 
mysalt=os.urandom(12).encode('hex') 

hash = pbkdf2_sha256.encrypt("password") 
print hash 

print pbkdf2_sha256.verify("password", hash) 

pwd='sefrhiloliutzrthgrfsdyv<sef234244567!"234wsdycvhn' 

mypass =mysalt+pwd 

print mypass 

hash2 =pbkdf2_sha256.encrypt(mypass, rounds =200000) 
hash1= pbkdf2_sha256.encrypt(pwd, rounds=80000, salt_size=100) 

print"hash2: ", hash2 
print pbkdf2_sha256.verify(mypass,hash2) 
Смежные вопросы