我有以下代码片段:
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
pwd_context.hash(password)
Run Code Online (Sandbox Code Playgroud)
这里描述的是。
我不明白的是,如果它始终返回相同的散列密码而不考虑另一个 Secret_key 例如散列密码值,这怎么可能是安全的?
我有一个尝试 import 的 python 模块from passlib.hash import pbkdf2_sha256,但是在运行该模块时,我收到 ModuleNotFoundError。
我尝试在我的基本环境(venv)中运行该模块,并尝试通过诗歌安装、pip install、pip install --force-reinstall 重新安装 passlib,但都没有让模块看到正在安装 passlib。我完全不明白为什么这个库不起作用。
完整的错误消息是:
诗歌运行 src/api-keychain/main.py --help
Traceback (most recent call last):
File "XXX/src/api-keychain/main.py", line 5, in <module>
from crypto import encrypt_key, decrypt_key
File "XXX/src/api-keychain/crypto.py", line 5, in <module>
from passlib.hash import pbkdf2_sha256
ModuleNotFoundError: No module named 'passlib'
Run Code Online (Sandbox Code Playgroud) 尝试将 passlib 导入 python3 并失败:
$ pip freeze | grep lib
passlib==1.6.5
$ python3
Python 3.4.2 (default, Oct 8 2014, 10:45:20)
>>> import passlib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'passlib'
Run Code Online (Sandbox Code Playgroud) 我有两个休息端点,一个用于注册用户,另一个用于登录用户.这是我用来散列用户密码并将散列密码存储在数据库中的代码,
from passlib.hash import pbkdf2_sha256
def _get_hashed_password(self, password):
return pbkdf2_sha256.encrypt(password, rounds=200000, salt_size=16)
Run Code Online (Sandbox Code Playgroud)
现在在登录端点上我使用此代码来验证散列密码,
password = data['password']
hash = pbkdf2_sha256.encrypt(password, rounds=200000, salt_size=16)
pbkdf2_sha256.verify(user.hashed_password, hash)
Run Code Online (Sandbox Code Playgroud)
这种方法失败并且显然是因为两个密码不同,
$pbkdf2-sha256$200000$ai0FoDTG2BuDkDKGEIJQKg$Ik06dr61.2rRMDwZCZMdVq.zMe5887.ksDxvmSXFRwE
$pbkdf2-sha256$200000$pHTuHYNwLoXQeu8dI0QoxQ$2z4cZl9Njz9X/bxNtWCZzzeplWO.jTZA2v5lvcmgFE8
Run Code Online (Sandbox Code Playgroud)
我想知道如何让它工作?