【发布时间】:2012-07-11 02:59:28
【问题描述】:
我正在尝试从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 是为登录提交的原始密码
-
不要扮演自己的角色,使用PHPass
-
两个 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 Password Hashing FAQ。
标签: php security passwords hash salt