我想知道是否有一种方法可以更改我的网站散列密码的方式。我的程序员朋友不是最聪明的,因为他没有在sha512哈希中添加盐。所以现在它非常不安全,我希望改变这一点。我正在考虑制作一些复杂的代码,以便在具有旧哈希类型的人登录时重新哈希,并且在添加盐后会将变量设置为 true。或者我可以获取当前散列的密码,并以某种方式将盐融合到其中。如果没有必要,我宁愿不重置我的用户数据库。任何想法都会有所帮助。我也是相当的 php 菜鸟,所以如果您包含代码,请解释一下。
使用此方法对其进行哈希处理。
<?php hash('sha512',"passwordhere") ?>
- 更改用户表以包含"盐"列,默认值为"NULL"。
- 更改您的登录代码以检查用户是否有盐:
- 如果是,请比较加盐哈希并登录
- 如果否:
- 比较未加盐的哈希值。
- 生成随机盐。
- 生成你的咸哈希。
- 将新的盐和哈希存储在数据库中。
- 继续登录过程。
当然,您还需要更新代码以进行注册,密码更改/恢复等。
或者,您可以放入"hash_ver"列而不是"盐"列,并使用它来确定使用哪种验证方法以及何时更新哈希。这样,如果您希望使用一种哈希方法,将盐与哈希(如bcrypt)一起打包,您就不会陷入试图弄清楚您正在处理的哈希类型
每个密码存储系统都必须可以选择切换到更好的哈希算法,您的问题不是一次性迁移问题。在回答这个问题时,我试图指出必要的步骤。
注意:像 SHA-* 这样的快速哈希算法不适合哈希密码,而是直接切换到像 BCrypt 这样的慢速密钥派生函数。新的PHP函数password_hash()将使哈希变得容易(它将为你生成一个安全的盐),并且是"面向未来的",它也将使未来的切换成为可能。
$old_hash = hash('sha512',"passwordhere");
$salt = ''; // Generate salt here
$new_hash = hash('sha512', $old_hash.$salt) ;