重新哈希用户数据库


Re-Hash user database

我想知道是否有一种方法可以更改我的网站散列密码的方式。我的程序员朋友不是最聪明的,因为他没有在sha512哈希中添加盐。所以现在它非常不安全,我希望改变这一点。我正在考虑制作一些复杂的代码,以便在具有旧哈希类型的人登录时重新哈希,并且在添加盐后会将变量设置为 true。或者我可以获取当前散列的密码,并以某种方式将盐融合到其中。如果没有必要,我宁愿不重置我的用户数据库。任何想法都会有所帮助。我也是相当的 php 菜鸟,所以如果您包含代码,请解释一下。

使用此方法对其进行哈希处理。

<?php hash('sha512',"passwordhere") ?>
  1. 更改用户表以包含"盐"列,默认值为"NULL"。
  2. 更改您的登录代码以检查用户是否有盐:
    • 如果是,请比较加盐哈希并登录
    • 如果否:
      1. 比较未加盐的哈希值。
      2. 生成随机盐。
      3. 生成你的咸哈希。
      4. 将新的盐和哈希存储在数据库中。
      5. 继续登录过程。

当然,您还需要更新代码以进行注册,密码更改/恢复等。

或者,您可以放入"hash_ver"列而不是"盐"列,并使用它来确定使用哪种验证方法以及何时更新哈希。这样,如果您希望使用一种哈希方法,将盐与哈希(如bcrypt)一起打包,您就不会陷入试图弄清楚您正在处理的哈希类型

每个密码存储系统都必须可以选择切换到更好的哈希算法,您的问题不是一次性迁移问题。在回答这个问题时,我试图指出必要的步骤。

注意:像 SHA-* 这样的快速哈希算法不适合哈希密码,而是直接切换到像 BCrypt 这样的慢速密钥派生函数。新的PHP函数password_hash()将使哈希变得容易(它将为你生成一个安全的盐),并且是"面向未来的",它也将使未来的切换成为可能。

$old_hash = hash('sha512',"passwordhere");
$salt = ''; // Generate salt here
$new_hash = hash('sha512', $old_hash.$salt) ;