0

我在 mysql 中有一个表,其中包含字段 id、用户名、密码和盐:

例子:

编号:1

用户名:管理员

密码:11ca8949f9462890f2535c9a43ac52b8c10a9342

:8d17f0de29daed0f3b4cd38f980683d01ec50729

没有。像这样的记录。

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

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

谢谢

4

3 回答 3

3

假设您希望每个人都拥有相同的固定密码,并且哈希仅由连接密码和盐的 SHA1 校验和组成,这将是所有需要的:

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

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

或者,您可以临时添加一列“newpassword”,使用类似于上面使用该列的 UPDATE 命令,然后删除它。但这并不能解决如何为用户获取新密码的问题。

于 2012-05-19T06:38:54.450 回答
1

如果您在数据库中没有明文形式的原始密码(您当然不应该!),这不会是一个一步的过程。

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

然后在您的登录代码中,在用户提交密码并正确地对存储的数据库哈希进行哈希处理后,使用用户输入的密码根据您的新方法生成一个新哈希,更新数据库中的哈希,并将哈希类型设置为新.

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

于 2012-05-19T06:32:44.900 回答
1

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

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

试试这个

于 2012-06-05T05:28:22.583 回答