我使用crypt()函数以blowfish盐的形式来加密密码,格式如下:
$2a$、2个数字、$、21个[a-zA-Z0-9]字符
这里我犯了一个错误,第三个$后面的字符长度是21而不是22。但它仍然可以正常工作,所以我没有发现这个错误。
它可以在我的台式机上运行(Windows和php 5.4.4)以及在AWS ec2上运行(Amazon Linux和php 5.3.x),即使盐太短也可以。
有一天,我升级了AWS的php版本到5.5.14,然后问题就出现了。crypt()函数总是返回*0。
经过尝试,我在盐的末尾添加了一个$,使其变成了22个字符。然后它再次可以工作,并返回与之前相同的哈希字符串。尽管它不符合blowfish规则,字符应该是[./a-zA-Z0-9]。
但现在我将此站点复制到另一台机器上,该机器运行openSuSE 13.1和php 5.5.14,这个盐又失败了。
我将php降级到5.4.20但没有帮助。
新站点仍需要旧数据库,因此我必须让密码哈希值能够正常工作。
是哪个库或模块影响了这个blowfish盐长度错误的兼容性问题?似乎不是PHP的版本。AWS 5.5.14
或者还有其他神奇字符可以再次拯救我吗?我尝试将$替换为[./a-zA-Z0-9]中的每个字符,但没有成功,哈希字符串是不同的...
这里我犯了一个错误,第三个$后面的字符长度是21而不是22。但它仍然可以正常工作,所以我没有发现这个错误。
它可以在我的台式机上运行(Windows和php 5.4.4)以及在AWS ec2上运行(Amazon Linux和php 5.3.x),即使盐太短也可以。
有一天,我升级了AWS的php版本到5.5.14,然后问题就出现了。crypt()函数总是返回*0。
经过尝试,我在盐的末尾添加了一个$,使其变成了22个字符。然后它再次可以工作,并返回与之前相同的哈希字符串。尽管它不符合blowfish规则,字符应该是[./a-zA-Z0-9]。
但现在我将此站点复制到另一台机器上,该机器运行openSuSE 13.1和php 5.5.14,这个盐又失败了。
我将php降级到5.4.20但没有帮助。
新站点仍需要旧数据库,因此我必须让密码哈希值能够正常工作。
是哪个库或模块影响了这个blowfish盐长度错误的兼容性问题?似乎不是PHP的版本。AWS 5.5.14
或者还有其他神奇字符可以再次拯救我吗?我尝试将$替换为[./a-zA-Z0-9]中的每个字符,但没有成功,哈希字符串是不同的...