【问题标题】:How do I replicate a django password validation function in PHP?如何在 PHP 中复制 django 密码验证功能?
【发布时间】:2013-07-29 21:55:38
【问题描述】:

我需要在 php.ini 中检查密码的有效性。密码在 django 中使用 pbkdf2 散列器进行散列,散列算法为 sha256。

https://gist.github.com/staydecent/1019680

Verifying Django Password in Ruby on Rails gives non-matching password

据我了解,存储 django 密码时,哈希样式是第一个组件,其次是复制次数,然后是盐,然后是哈希。

我已经成功提取了每个组件,但是下面的php不起作用。它返回一个正确长度的字符串,但不是正确的内容。我担心哈希码不起作用。我使用的哈希器来自这个网站: https://defuse.ca/php-pbkdf2.htm

这是我的 php:

//$enc_password is the password from database
$pieces = explode('$', $enc_password);
$iterations = $pieces[1];
$salt = $pieces[2];
$hash = $pieces[3];
//raw_password is user's entered password
if ($hash ==  base64_encode(pbkdf2("sha256", $raw_password, $salt, $iterations, 32, true)))
{
    echo ("SUCCESS");
}
else
{
    echo ("FAILED");
}

感谢任何和所有帮助!

【问题讨论】:

标签: php django hash passwords encode


【解决方案1】:

我刚刚用 Python 和 PHP 做了一个简单的测试。

在 Python 中:

>>> from django.utils.crypto import pbkdf2
>>> import base64, hashlib
>>> hash = pbkdf2("test_password","myHash", 10000, 32, hashlib.sha256)
>>> hash.encode('base64').strip()
'lRKgL0zAmPwIMPNhTy1wJRXWZQwcHlbIW3glYA4LPU8='

在 PHP 中:

<?php
include 'pbkdf2.php';
echo base64_encode(pbkdf2('sha256', 'test_password', 'myHash', 10000, 32, true));
// result is: lRKgL0zAmPwIMPNhTy1wJRXWZQwcHlbIW3glYA4LPU8=
?>

两个测试的结果是相同的,所以哈希码没有问题。您确定您的 Django 测试使用的是 pbkdf2 算法吗?并且您的用户输入的示例与测试密码相同?

【讨论】:

  • 如果你能提供一个哈希密码的例子就好了,然后我们可以一起看看如何在 PHP 中复制它。
  • 我不敢相信我为此苦苦挣扎了这么久-.-我忘记了我使用的是旧版本的数据库进行测试,并且自从数据库备份以来密码已更改。
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 2015-11-02
  • 2019-06-02
  • 2019-05-19
  • 1970-01-01
  • 2019-05-24
  • 2018-09-17
  • 2017-12-22
相关资源
最近更新 更多