用于哈希密码的 PHP 算法


PHP algorithm to hash passwords

我正在研究密码加密算法。我知道bcrypt,scrypt和变体的存在,但我想在这个问题上让自己陷入困境,这就是为什么我在PHP中提出了这个算法:

$secret = md5( uniqid( mt_rand(), true ) ); // Length is 32
$passwd = 'qwert123';
$hash = $secret . hash( 'sha256', $secret + $passwd );

由于 secret 是随机确定并添加到密码哈希的前面,因此我可以像这样验证密码输入:

$secret = substr( $hash_from_db, 0, 32 );
$hash_from_db === $secret . hash( 'sha256', $secret + $input_from_user );

您如何看待这种实现?我希望收到一些关于它的反馈。谢谢。

如果您使用的是 PHP 5> 5.5,则可以使用新的 password_hash() 函数。

旧版本的PHP有兼容性函数 - 这里有一个:https://github.com/ircmaxell/password_compat/blob/master/lib/password.php

MD5被认为是加密破坏的 - 不要使用它来保证安全。

你只哈希盐+密码一次。我花了大约 10 秒才找到一个工具,可以使用字典查找来破解这样的盐渍哈希。您的实现不应被视为安全,可以抵御任何形式的确定攻击。

为了改进事情,请考虑多次散列;使用多个盐;中途更改散列算法;引入一些不可预测的东西。速度不是你的朋友 - 你花在混淆事情上的时间越多,它就越安全。