php-如何正确实现hash_hmac?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-如何正确实现hash_hmac?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1314字,纯文字阅读大概需要2分钟。
内容图文
![php-如何正确实现hash_hmac?](/upload/InfoBanner/zyjiaocheng/653/aa7f6818502842b5967f1ae9145e9f20.jpg)
阅读有关密码哈希的this excellent answer并想知道如何实现:
Generate a nonce for each user; this alone defeats the rainbow table. This is a random number that, depending on the range, expands how many resulting hashes there are.
因此,在用户密码旁边,在我的数据库中存储一个唯一令牌?
原始帖子中的示例代码:
function hash_password($password, $nonce) {
global $site_key;
return hash_hmac('sha512', $password . $nonce, $site_key);
}
如何使用此代码验证密码?让我解释:
当用户提交密码时,我需要生成其哈希值以检查电子邮件地址和哈希密码是否匹配的现有数据库行.当我对用户的$nonce一无所知时,如何选择此行?我想念什么吗?也许我只需要通过用户的电子邮件地址选择用户,然后稍后再验证密码哈希?
顺便说一句,您是否推荐这种哈希方法?
解决方法:
我想您已经确定了主意.通用UNIX风格的带盐密码中也采用了相同的概念-将盐以明文形式存储在带有密码的密码中,并通过用户名进行检索,然后使用盐和提供的密码生成新的哈希值,以与存储的值进行比较.
您可以考虑是否信任数据库服务器(及其连接)来使用数据库支持的哈希算法,并让数据库进行计算:
SELECT * FROM users WHERE email = 'email' AND password = SHA1(CONCAT('cleartextpass',nonce));
或者,您可以在检索所有匹配的电子邮件后在代码中进行数学运算.
编辑:ThiefMaster关于区分丢失的用户密码和无效密码的评论是经典的安全漏洞,它使攻击者可以获得有效用户名的列表,并专注于破坏其密码,而不是在黑暗中钓鱼.我强烈建议您反对.
内容总结
以上是互联网集市为您收集整理的php-如何正确实现hash_hmac?全部内容,希望文章能够帮你解决php-如何正确实现hash_hmac?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。