python - bcrypt download
Frasco-generate_password_hash no salida constante (1)
La contraseña está en sal , sí. La sal se agrega a la contraseña antes de hash, para garantizar que el hash no se pueda utilizar en un ataque de tabla arcoiris .
Debido a que la sal se genera aleatoriamente cada vez que llama a la función, el hash de contraseña resultante también es diferente. El hash devuelto incluye la sal generada para que pueda verificar correctamente la contraseña.
Manifestación:
>>> from werkzeug.security import generate_password_hash
>>> generate_password_hash(''foobar'')
''pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d''
>>> generate_password_hash(''foobar'')
''pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d''
Estas dos cadenas son diferentes; pero contienen suficiente información para verificar la contraseña porque la sal generada está incluida en cada uno:
# pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d
^^^^^^^^^^^^^^^^ salt ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
algo info ^^^^^^^^ actual hash of the password
(PBKDF2 applied SHA1 1000 times)
Debido a que la sal aleatoria es tYqN0VeL
para uno y XHj5nlLU
, el hash resultante también es diferente.
La contraseña de foobar
aún se puede verificar contra hash:
>>> from werkzeug.security import check_password_hash
>>> check_password_hash(''pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d'', ''foobar'')
True
>>> check_password_hash(''pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d'', ''foobar'')
True
Ver también
- ¿Puedes ayudarme a entender qué es una "sal" criptográfica? (Criptografía.SE)
- ¿Por qué usar sal es más seguro? (Security.SE)
En Flask,
Cuando intento ejecutar generate_password_hash("Same password")
varias veces, la salida es diferente cada vez.
Qué estoy haciendo mal. ¿Por qué no es constante?
Supongo que tiene algo que ver con poner la sal.