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

см. Также