【问题标题】:How to migrate password hashes from Passlib.bcrypt to Django's default pbkdf2_sha256?如何将密码哈希从 Passlib.bcrypt 迁移到 Django 的默认 pbkdf2_sha256?
【发布时间】:2022-11-19 11:01:38
【问题描述】:
我有一个 FastAPI 应用程序,它一直在使用 Passlib 的 bcrypt 模块来散列密码。
这是作为密码存储在数据库中的示例字符串:$2b$12$62GCnIkiQp7dE/N2.Al4t.ODW.JYXCz8rHHmaLt63NnML4xDgKhFK
现在,问题是我不确定是否可以将此散列迁移到我的新 Django 应用程序,因为 Django 将散列存储在如下所示的字符串中:<algorithm>$<iterations>$<salt>$<hash>
我认为解决方案可能是 PassLib 哈希是 B64 编码的,但我不确定如何将其解码为适用于 Django 的内容。
【问题讨论】:
标签:
python
hash
bcrypt
pbkdf2
【解决方案1】:
好的,所以在尝试之后我想出了解决方案
首先:将"django.contrib.auth.hashers.BCryptPasswordHasher"添加到settings.PASSWORD_HASHERS
现在,您可以为每个看起来像 $2b$12$62GCnIkiQp7dE/N2.Al4t.ODW.JYXCz8rHHmaLt63NnML4xDgKhFK 的字符串添加 bcrypt$,使结果看起来像 bcrypt$$2b$12$62GCnIkiQp7dE/N2.Al4t.ODW.JYXCz8rHHmaLt63NnML4xDgKhFK。
不知道为什么方法名称后必须有两个美元符号,但如果它们不存在 - django 引发异常:它期望来自 hash.split("$") 的 5 个对象,第二个对象称为“空”。
对我在 FastAPI 应用程序中使用的密码执行此操作并将用户添加到 django 后,授权开始工作。