草庐IT

php crypt() 河豚盐长度向后兼容

我使用crypt()来散列密码,使用像这样的河豚盐:$2a$,2digits,$,21charsin[a-zA-Z0-9]这里我犯了一个错误,第三个$之后的字符长度是21而不是22。但它工作正常,所以我没有发现错误。它适用于我运行Windows和php5.4.4的桌面,以及运行Amazonlinux和php5.3.x的AWSec2,盐太短。有一天我将AWSphp更新到5.5.14。然后问题发生了。crypt()始终返回*0。经过一些尝试,我在salt的末尾添加了一个$,所以它变成了22个字符。它再次工作并返回与以前相同的哈希字符串。虽然它不遵守河豚规则,但字符应该是[./a-zA-Z0

php - Crypt() 函数的河豚盐长度?

根据crypt()documentation,盐必须是字母“./0-9A-Za-z”中的22位64位数字。这是他们给出的代码示例:crypt('rasmuslerdorf','$2a$07$usesomesillystringforsalt$');第一个令人困惑的部分是salt有25个字符,而不是22个。问题#1:这是否意味着盐应该长超过22个字符?然后我自己测试了这个函数,发现了一些东西。如果我使用20个字符的盐,我会得到这个//using20charsalt:00000000001111111111crypt('rasmuslerdorf','$2a$07$000000000011