Php 镶嵌字符串前面的$xx$符号是什么意思?

Php 镶嵌字符串前面的$xx$符号是什么意思?,php,content-management-system,cryptography,Php,Content Management System,Cryptography,我注意到很多PHP软件,比如Joomla!或Wordpress将“$xx$”符号前置到其哈希字符串。例如,在数据库中存储用户密码时,就会发生这种情况。 这是什么原因?这个$xx$表示使用了什么哈希算法。作为结果字符串的一部分很有用的一个原因是,它允许您在数据库中有多种类型的哈希,而不会因为不知道使用了什么哈希算法而中断。它还为您提供了升级路径,以提高密码的安全性 如果您使用crypt,您只需使用crypt($password,$hash)=$hash,然后crypt从您提供的哈希中找出要使用的算

我注意到很多PHP软件,比如Joomla!或Wordpress将“$xx$”符号前置到其哈希字符串。例如,在数据库中存储用户密码时,就会发生这种情况。

这是什么原因?

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

如果您使用
crypt
,您只需使用
crypt($password,$hash)=$hash
,然后
crypt
从您提供的哈希中找出要使用的算法。它还可以提取盐和其他选项(取决于算法)


例如,对于sha256,您会得到类似“
$5$rounds=5000$usesomesillystri$kqjwpanxzhkq2bob43tsayhewsq1llr5qnypcdh/Tp.6
”(来自)。“
5
”表示散列算法,“
rounds=5000
”是散列算法使用的选项,“
usesomesillystringforsalt
”是salt,它确保相同密码的散列对于不同的人看起来不同,并使暴力攻击散列变得更加困难。“
kqjwpanxzhkq2bob43thaysq1lr5qnypcdh/Tp.6
”是实际的散列密码。

它表示使用的散列算法。它标识使用的特定散列算法。请注意,如果它实际读取了
“usesomesillystringforsalt”
,则实现者犯了一个错误,salt应该由安全的随机数生成器生成,否则可能会受到攻击。