微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何最好地从hash(‘sha512′,’salt’)升级到password_ *函数

我热衷于将我的代码迁移到PHP本身提供的新password_*函数.

数据库中的现有哈希值已生成如下:

hash ('sha512', '<A constant defined earlier>' . $email . $password);

我想把它们变成现在推荐的哈希:

password_hash ($password, PASSWORD_DEFAULT);

显然,当用户登录时,我可以借此机会从他们刚刚提供的密码创建新哈希,并将其保存在数据库中.

但是,我想避免在数据库中有两个字段,一个用于已弃用的哈希,另一个用于现代的password_hash.相反,我宁愿在每个用户登录时更换旧的.

因此,是否可以保留单个数据库字段,并让用户代码确定散列是否旧,即确定使用哪个检查?

(我假设散列(‘sha512’)哈希不能自动升级到crypt()那些?)

解决方法:

使用password_hash创建的哈希在开头会有一个非常独特的$2y $字符串(或类似的$.. $,只要你使用当前的认值Blowfish cypher运行),而SHA256将只是所有十六进制值.因此,您可以简单地测试值是旧散列值还是password_hash值:

function isLegacyHash($hash) {
    return !preg_match('/^\$\w{2}\$/', $hash);
}

使用此方法,您可以将两种类型的哈希值保留在一个字段中,并在用户登录时进行升级.或者,您可以在hash_version之类的列中设置标记.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐