加密字符串前面的$ xx $符号是什么意思?

时间:2013-12-13 14:59:43

标签: php content-management-system cryptography

我注意到很多PHP软件,比如Joomla!或Wordpress前置“$ xx $。”符号到它们的散列字符串。例如,当将用户密码存储在数据库中时会发生这种情况 这是什么原因?

1 个答案:

答案 0 :(得分:2)

$xx$表示使用的散列算法。这是结果字符串的一部分是有用的一个原因是,它允许您在数据库中具有多种类型的哈希,而不会因为您不知道使用了什么哈希算法而破坏。它还为您提供升级路径,以提高密码的安全性。

如果您使用crypt,则只需使用您提供哪种算法的哈希值中的crypt($password, $hash) == $hashcrypt数字。它还可以提取盐和其他选项(取决于算法)。

例如对于sha256,您会得到类似“$5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6”的内容(来自http://php.net/manual/en/function.crypt.php)。 “5”表示散列算法,“rounds=5000”是散列算法使用的选项,“usesomesillystringforsalt”是一个salt,可确保相同密码的哈希看起来像对于不同的人来说是不同的,并且更难以暴力攻击哈希。 “KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6”是实际的哈希密码。