我注意到很多PHP软件,比如Joomla!或Wordpress前置“$ xx $。”符号到它们的散列字符串。例如,当将用户密码存储在数据库中时会发生这种情况 这是什么原因?
答案 0 :(得分:2)
$xx$
表示使用的散列算法。这是结果字符串的一部分是有用的一个原因是,它允许您在数据库中具有多种类型的哈希,而不会因为您不知道使用了什么哈希算法而破坏。它还为您提供升级路径,以提高密码的安全性。
如果您使用crypt
,则只需使用您提供哪种算法的哈希值中的crypt($password, $hash) == $hash
和crypt
数字。它还可以提取盐和其他选项(取决于算法)。
例如对于sha256,您会得到类似“$5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
”的内容(来自http://php.net/manual/en/function.crypt.php)。 “5
”表示散列算法,“rounds=5000
”是散列算法使用的选项,“usesomesillystringforsalt
”是一个salt,可确保相同密码的哈希看起来像对于不同的人来说是不同的,并且更难以暴力攻击哈希。 “KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
”是实际的哈希密码。