我在学习密码加密算法。我知道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 );您对这个实现有什么看法?我很想收到一些关于它的反馈。谢谢。
发布于 2013-09-11 22:39:47
如果使用PHP5> 5.5,则可以使用新的password_hash()函数。
PHP的旧版本有兼容性函数--这里有一个:compat/blob/master/lib/password.php
发布于 2013-09-11 22:23:27
MD5被认为是加密中断的--不要将它用于安全性。
你只对salt+password进行了一次哈希。我花了大约10秒的时间找到一个工具,它将破解像这样的盐渍散列,使用字典查找。您的实现不应被认为是安全的,不受任何形式的坚决攻击。
要改善情况,可以考虑多次哈希;使用多个salt;部分地改变哈希算法;引入一些不可预测的东西。速度不是你的朋友--你花的时间越多,事情就越安全。
https://stackoverflow.com/questions/18752236
复制相似问题