【问题标题】: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 后,授权开始工作。

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      相关资源
      最近更新 更多