Лучше сохранить / вставить хешированную строку в таблицу базы данных перед сохранением пароля? - PullRequest
0 голосов
/ 15 января 2012
import bcrypt

hashedstring = bcrypt.gensalt()
password = bcrypt.hashpw(password,hashedstring)

Должен ли я сохранять хеш-строку каждый раз в поле таблицы базы данных для успешного входа в следующий раз при получении хеш-строки?

Или я должен использовать статическую предварительно сгенерированную хешированную строку в коде?

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Соль, которую вы используете для хеширования пароля, сохраняется в результирующем хеше - это означает, что нет необходимости хранить его в базе данных, так как его можно восстановить из хэша.

В соответствии с проектомстраница, это можно сделать так:

# Store a hash.
import bcrypt
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
store_in_db(user, hashed) #Where user is the user to load the hash for, and store_in_db does what it says on the tin.

# Check against an existing hash
import bcrypt
hashed = load_from_db(user) # (get the password of the user from database) Where user is the user to load the hash for, and load_from_db does what it says on the tin.
if bcrypt.hashpw(password, hashed) == hashed: # Where password is a plaintext password attempt.
        print "It matches"
else:
        print "It does not match"

И да, вы должны использовать разные соли для каждого значения - что поощряет дизайн BCrypt.

1 голос
/ 15 января 2012

Краткий ответ: используйте новую соль для каждого пароля. (РЕДАКТИРОВАТЬ: с bcrypt вам не нужно хранить соль отдельно)

Представьте, что злоумышленник получает базу данных паролей с веб-сайта. Если все пароли хешируются с использованием обычной соли, то злоумышленник может легко найти людей, использующих общие пароли:

hashedpwd = somehash('swordfish' + salt)

Тогда нужен только запрос к базе данных, чтобы найти всех, кто использует «меч-рыбу» в качестве пароля. Всегда будет существенная доля пользователей с довольно общими паролями.

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

...