我试图从crackstation.net实现密码散列/腌制算法,但我不确定如何实现它。从crackstation.net实现密码散列/腌制算法
在用户注册时存储密码似乎与将密码传递到create_hash()一样简单。
$password = create_hash($_POST['Password'];
我不是跟随如何验证用户登录。 validate_password($ password,$ good_hash)返回true或false,并将$ password作为参数,所以除了第二个参数$ good_hash之外,它看起来似乎没有什么意思。这个参数来自哪里?
我的理解是,密码在每次使用时变成散列值,并且散列值是存储和比较的值。那么为什么我会同时拥有$ password和$ good_hash值呢?
的功能快速浏览:
function create_hash($password){
calls pbkdf2()
}
function validate_password($password, $good_hash){
calls pbkdf2()
calls slow_equals()
}
function slow_equals($a, $b){
}
function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false){
}
当然这种不同的,更好的方法也将是一种有益的。 谢谢
我会假设$ good_hash是存储的散列密码,并且$ password是提交登录的原始密码 – 2012-07-11 03:17:15
不要自己扮演角色,请使用[PHPass](http://stackoverflow.com/questions/1581610/how-我的用户密码安全/ 1581919#1581919) – Jacco 2012-07-12 10:48:32
两个PBKDF2注意事项:首先,尽可能使用高迭代次数,并在峰值负载期间保持足够的性能。其次,永远不要求比本机散列更多的输出长度(SHA-1是20字节,SHA-224是28字节,SHA-256是32字节,SHA-384是48字节,而SHA-512是64字节)。一种不同的方法是password_hash()和password_verify(),从5.5开始可以在PHP中使用,并且从5.3.7开始使用兼容性库,每个[PHP.net密码散列常见问题](http://www.php.net/manual /en/faq.passwords.php)。 – 2014-03-25 02:51:58