2024-09-28 11:41:10 发布
网友
我必须将我的flask用户迁移到django。在flask中,我使用werkzeug库生成了密码,如:
generate_password_hash(value, method='sha256')
在django导入中,我保存了密码:
u.password = hashed_pw
现在,密码位于数据库中,如下所示:
'sha256$VSvtvATP$2c87cf...'
现在django无法验证我的密码。我如何转换密码以便django能够处理它
flask和django使用hashlib.pbkdf2_hmac生成密码散列。不同之处在于格式和编码。因此,可以透明地将密码哈希从一种格式转换为另一种格式。(我想知道为什么不均匀,减少摩擦)
hashlib.pbkdf2_hmac
def trans_hash(str): """from flask to django""" [alg, _hash_alg, rest] = str.split(':') [iteration, salt, hashed] = rest.split('$') # in flask hex() formated, so decode using b16decode # https://github.com/pallets/werkzeug/blob/main/src/werkzeug/security.py#L162 raw_hash = base64.b16decode(hashed.strip().encode('ascii').upper()) # in django, use b64encode, https://github.com/django/django/blob/ca9872905559026af82000e46cde6f7dedc897b6/django/contrib/auth/hashers.py#L276 hashed = base64.b64encode(raw_hash).decode('ascii').strip() rest = '$'.join([iteration, salt, hashed] ) return f"{alg}_{_hash_alg}${rest}"
flask中的密码哈希:
pbkdf2:sha256:150000$zwBNBm5i$be85b2739ab81c94ea2596fe79c0f6e7d211561f5ea1525c5620e817ef3ea82b
将翻译为(django)
pbkdf2_sha256$150000$zwBNBm5i$voWyc5q4HJTqJZb+ecD259IRVh9eoVJcViDoF+8+qCs=
Django默认使用不同的密码散列算法,即PBKDF2和SHA-256。将现有散列移到Django的唯一方法是告诉它使用不同的散列器。普通的SHA-256哈希程序不是内置的,所以您必须write your own
不过,我会考虑不这样做,并为您现有的用户提供迁移路径,因为PBKDF2-SAH256被认为更安全:
将这些散列存储在用户的另一个字段中,并在首次登录时提示他们更改密码(然后扔掉旧散列,只保存以Django方式散列的密码)。您甚至可以对您的用户透明地执行此操作(即,在第一次登录时,在检查哈希与Flask中的旧哈希匹配后,基于相同的密码(此时您拥有的密码)生成一个新哈希并存储它,然后丢弃旧哈希
flask和django使用
hashlib.pbkdf2_hmac
生成密码散列。不同之处在于格式和编码。因此,可以透明地将密码哈希从一种格式转换为另一种格式。(我想知道为什么不均匀,减少摩擦)flask中的密码哈希:
将翻译为(django)
Django默认使用不同的密码散列算法,即PBKDF2和SHA-256。将现有散列移到Django的唯一方法是告诉它使用不同的散列器。普通的SHA-256哈希程序不是内置的,所以您必须write your own
不过,我会考虑不这样做,并为您现有的用户提供迁移路径,因为PBKDF2-SAH256被认为更安全:
将这些散列存储在用户的另一个字段中,并在首次登录时提示他们更改密码(然后扔掉旧散列,只保存以Django方式散列的密码)。您甚至可以对您的用户透明地执行此操作(即,在第一次登录时,在检查哈希与Flask中的旧哈希匹配后,基于相同的密码(此时您拥有的密码)生成一个新哈希并存储它,然后丢弃旧哈希
相关问题 更多 >
编程相关推荐