重新散列用户数据库

时间:2013-09-10 23:11:12

标签: php hash salt password-encryption sha512

我想知道是否有一种方法可以改变我的网站散列密码的方式。当他没有在sha512哈希中添加盐时,我的编码器朋友不是最聪明的。所以现在它非常不安全,我希望改变它。当有人使用旧的哈希类型登录并且在添加盐之后将变量设置为true时,我正在考虑制作一些复杂的代码来重新进行重新编码。或者我可以使用当前的哈希密码并以某种方式将盐融合到它们中。如果我不需要,我宁愿不重置我的用户数据库。任何想法都会有帮助。我也是php noob所以请解释一下你是否包含代码。

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

<?php hash('sha512',"passwordhere") ?>

3 个答案:

答案 0 :(得分:2)

  1. 更改用户表以包含“salt”列,默认值为“NULL”。
  2. 更改您的登录代码以检查用户是否有盐:
    • 如果是,请比较盐渍哈希并登录
    • 如果不是:
      1. 比较未加盐的哈希值。
      2. 生成随机盐。
      3. 生成你的咸哈希。
      4. 将新盐和哈希值存储在数据库中。
      5. 继续登录过程。
  3. 当然,您还需要更新代码以进行注册,密码更改/恢复等。

    或者,您可以放入'hash_ver'列并使用它来确定要使用的验证方法以及何时更新散列,而不是'salt'列。这样一来,如果您希望使用散列方法将盐包装在像bcrypt这样的散列中,那么您就不会试图找出您正在处理的散列类型。

答案 1 :(得分:1)

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

注意:像SHA- *这样的快速哈希算法不适合哈希密码,而是直接切换到像BCrypt这样的慢键派生函数。新的PHP函数password_hash()将使哈希变得容易(它将为您生成安全的盐),并且是“未来证明”,它也将在未来进行切换。

答案 2 :(得分:0)

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