0

我正在研究密码加密算法。我知道 bcrypt、scrypt 和变种的存在,但我想在这个问题上挑战自己,这就是我在 PHP 中提出这个算法的原因:

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

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

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

你怎么看这个实现?我想收到一些关于它的反馈。谢谢你。

4

2 回答 2

2

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

旧版本的 PHP 有兼容功能 - 这是一个:https ://github.com/ircmaxell/password_compat/blob/master/lib/password.php

于 2013-09-11T22:39:47.107 回答
0

MD5 被认为是密码破解 - 不要将其用于安全性。

您只对盐+密码进行一次哈希处理。我花了大约 10 秒钟才找到一个工具,它可以使用字典查找来破解像这样的加盐哈希。您的实现不应该被认为是安全的,可以抵御任何形式的确定攻击。

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

于 2013-09-11T22:23:27.757 回答