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


What do the $xx$ symbols in front of the encripted strings mean?

我注意到很多PHP软件,如Joomla!或Wordpress在其散列字符串前面加上"$xx$."符号。例如,在数据库中存储用户密码时会发生这种情况。
这是什么原因呢?

$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"是盐,它确保相同密码的哈希对于不同的人看起来不同,并且更难暴力攻击哈希。"KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6"是实际的散列密码。