所以我在查看WordPress\'s的源代码,因为我很好奇在后端如何比较哈希。然而,我无法理解phpass究竟是如何为单个输入生成不同的散列的(每次都考虑不同的随机salt)。
在最新的WordPress版本中,CMS使用CheckPassword 定义的功能:
function CheckPassword($password, $stored_hash)
{
if ( strlen( $password ) > 4096 ) {
return false;
}
$hash = $this->crypt_private($password, $stored_hash);
if ($hash[0] == \'*\')
$hash = crypt($password, $stored_hash);
return $hash === $stored_hash;
}
不应该
hash
无论盐的输入如何,始终有不同的值?WordPress对哈希使用静态salt吗?如果是,在哪里定义,如何生成?
SO网友:Mark Kaplun
将密码存储在DB中时对其进行哈希处理的要点是,如果有人转储了DB,则不会泄露密码。密码与哈希之间必须存在1:1的关系,因为您需要能够计算给定密码的哈希,并根据数据库中存储的值验证其正确性,如果对密码进行哈希运算可能有多个正确结果,则无法执行此操作。
使用盐不会产生任何真正的区别,因为您将添加的任何盐都是常量,并且以相同的方式添加,并且密码与数据库中存储的值之间仍然存在1:1的关系。
在研究如何verify_password
工作原理是,哈希多次包含签名,该签名指示用于生成哈希的哈希类型,以便软件能够在比较值时使用正确的哈希。对该值的不小心操作可能会导致您无法知道要使用哪个哈希。
最后也是最重要的一点是,盐可由用户配置(在wp-config.php
) 如果在散列密码时使用salt,用户可能无法ever 如果salt发生变化,请在不重置密码的情况下再次登录。如果您在代码中硬编码了值,那么由于它是开源的,每个人都可以知道正在使用的salt,这将使整个事情变得毫无意义。
那些觉得wordpress处理哈希的方式对于他们的需求来说不够安全的人总是可以实现他们自己的算法并覆盖wordpress的算法。