如何更改表中的SHA1和SALT加密密码

时间:2012-05-19 06:18:46

标签: php zend-framework sha1 salt

我在mysql中有表包含字段id,username,password和salt:

示例:

id :1

用户名:admin

密码:11ca8949f9462890f2535c9a43ac52b8c10a9342

:8d17f0de29daed0f3b4cd38f980683d01ec50729

没有。像这样的记录。

我的问题是:如何更改该表中所有用户的密码。

我想为每个用户创建一个新密码。这意味着我需要一个新的SHA1哈希和盐。我怎么能这样做。

由于

3 个答案:

答案 0 :(得分:3)

假设您希望每个人都拥有相同的固定密码,并且哈希只包含连接密码和salt的SHA1校验和,那么这就是全部:

UPDATE users SET password = SHA1(CONCAT('newpassword', salt));

这保留了原始盐(这不是一个真正的问题),但当然给每个人提供相同的密码是非常不安全的。如果要为每个用户生成不同的密码,则需要生成代码并将其单独发送给它们,并且该代码也可以更新每个用户的哈希密码条目。

或者,您可以临时添加列'newpassword',使用类似于上面使用该列的UPDATE命令,然后删除它。但这并没有解决如何向用户提供新密码的问题。

答案 1 :(得分:1)

如果您在数据库中没有纯文本的原始密码(当然不应该!),这不是一步到位的过程。

您需要做的是添加另一列,并为其命名,如“hashtype” - 此名称表示条目是否已从旧哈希升级到新哈希。

然后在您的登录代码中,在用户提交密码并对存储的db散列进行正确散列后,使用用户输入的密码为您的新方法生成新散列,更新数据库中的散列,并设置hashtype到new。

否则,您可以做一些疯狂的事情,例如清除所有用户密码并通过电子邮件强制重置密码。

答案 2 :(得分:1)

如果你有登录代码,那么你可以调试它并检查它是如何工作的。为其创建适当的脚本并使用以下查询更新密码。

update be_users set password=SHA1( CONCAT(  '$sha1',  '$newsalt' )), salt='your salt' where username='your username';

试试这个