加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2020-05-25 08:52:50 所属栏目:PHP 来源:互联网
导读:我使用crypt()来哈希密码,像这样的河豚盐: $2a$, 2 digits, $, 21 chars in [a-zA-Z0-9] 在这里我犯了一个错误,在第三个$21之后的字符长度不是22.但它工作正常所以我没有找到错误. 它适用于运行Windows和PHP 5.4.4的桌面以及使用php 5.3.x运行Amazon linux的

我使用crypt()来哈希密码,像这样的河豚盐:

$2a$,2 digits,$,21 chars in [a-zA-Z0-9]

在这里我犯了一个错误,在第三个$21之后的字符长度不是22.但它工作正常所以我没有找到错误.

它适用于运行Windows和PHP 5.4.4的桌面以及使用php 5.3.x运行Amazon linux的AWS ec2,其中包含太短的盐.

有一天,我将AWS php更新为5.5.14.然后问题发生了. crypt()一直返回* 0.

经过一番尝试,我在盐的末尾加了一个$,所以它变成22个字符.它再次工作并返回与以前相同的哈希字符串.虽然它不遵守河豚规则,但字符应为[./a-zA-Z0-9]

但是现在我将这个站点复制到另一台运行openSuSE 13.1和php 5.5.14的机器上,这个盐再次失败了.

我将php降级到5.4.20,但没有帮助.

新站点仍然需要旧数据库,所以我必须使密码哈希工作.

什么是影响此河豚盐长度错误兼容性问题的库或模块? Tt似乎不是PHP的版本. AWS 5.5.14

或者是否有另一个神奇的咒语可以再次救我?我尝试在[./a-zA-Z0-9]中为每个替换尾部$但是没有幸运,哈希字符串是不同的….

首先,我强烈建议使用新功能 password_hash()和 password_verify()来生成和验证新的哈希值.当然,这并不能解决旧哈希的实际问题,但将它们标记为旧的可能是个好主意,因此可以在用户下次登录时更新它们.

对于这个旧的哈希,我会尝试验证它们,生成一个有效的最后一个字符22的盐.crypt函数实际上只使用字符22的部分位(盐的126位而不是128位).因此,最后一个字符22的组将以相同的散列值结束.

请参阅此问题Why does crypt/blowfish generate the same hash…的答案

如果您尝试将所有相关字符[.Oeu]作为字符22,那么一个组合将产生与无效盐相同的结果的可能性很大.

编辑:

由于使用的盐成为密码哈希的一部分,您应该能够看到用作字符22的内容(第三个$之后的第22个字符).

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读