Flask-генерировать хэш пароля не постоянный выход
В Колбу,
когда я пытаюсь запустить generate_password_hash("Same password")
несколько раз
вывод каждый раз разный ?
что я делаю неправильно. Почему она не постоянна ?
im угадывая его что-то делать с солью ?
1 ответов
пароль соленое да. Соль добавляется к паролю перед хэшированием, чтобы убедиться, что хэш не используется в rainbow table attack.
поскольку соль генерируется случайным образом каждый раз, когда вы вызываете функцию, результирующий хэш пароля также отличается. Возвращаемый хэш включает сгенерированную соль, чтобы все еще можно было правильно проверить пароль.
демо:
>>> from werkzeug.security import generate_password_hash
>>> generate_password_hash('foobar')
'pbkdf2:sha1:1000$tYqN0VeLee2568465fa30c1e6680196f8bb9eb0d2ca072d'
>>> generate_password_hash('foobar')
'pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d'
эти две строки отличаются; но содержат достаточно информации для проверки пароля, потому что сгенерированная соль включена в каждый:
# pbkdf2:sha1:1000$tYqN0VeLee2568465fa30c1e6680196f8bb9eb0d2ca072d
^^^^^^^^^^^^^^^^ salt ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
algo info ^^^^^^^^ actual hash of the password
(PBKDF2 applied SHA1 1000 times)
потому что случайная соль tYqN0VeL
для одного и XHj5nlLU
, полученный хэш также отличается.
на foobar
пароль все еще может быть проверен против любого хэша:
>>> from werkzeug.security import check_password_hash
>>> check_password_hash('pbkdf2:sha1:1000$tYqN0VeLee2568465fa30c1e6680196f8bb9eb0d2ca072d', 'foobar')
True
>>> check_password_hash('pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d', 'foobar')
True
см. Также
- можете ли вы помочь мне понять, что криптографический "соли"? (Криптография.SE)
- почему использование соли более безопасно? (безопасность.SE)