首页 > 解决方案 > Django Rest:BaseUserManager 的 set_password() 函数中使用的散列

问题描述

我能知道 BaseUserManager 的 set_password() 中使用的散列算法吗 早期,我假设它必须创建与 make_password() 相同的输出(加密密码)。但两者都给出不同的输出

例如,

pbkdf2_sha256$120000$fpYd7FD1Cf3Z$sHRDYkxU6wST9i17AeVZeDPMGjwSpV4U1+8bxTC7B9U=

这是在我的应用程序中使用 set_password() 方法进行散列的(这是密码的加密形式,'password'

然后在python shell中,

>>>from django.contrib.auth.hashers import make_password
>>>make_password('password')

给出一个输出

'pbkdf2_sha256$120000$PCjS8f7J2zU8$7pj4Xp5R1h935z9U3UyRlcprJpQRgUID+I9UQp+q1w4='

我再次运行 make_password('password') 命令,有趣的是,这一次它也给出了不同的输出

'pbkdf2_sha256$120000$Jyhjh4luFw4F$wMKnv4BuNVw0NFpKgQjJNoyC6CuMqeXCo1neTEQ6S58='

所以,我想要的是我想在我的应用程序中添加一个更改密码功能。所以我希望我的用户在更改之前输入他当前的密码。由于它是使用 set_password() 进行散列的,我无法直接检查它。我认为唯一可能的方法是将输入的密码散列,然后与原始密码进行检查。任何人都可以帮我解决它吗?

标签: djangodjango-rest-framework

解决方案


推荐阅读