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


How to change SHA1 and SALT encrypted passwords in table

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

例:

编号 : 1

用户名 : 管理员

密码 : 11CA8949F9462890F2535C9A43AC52B8C10A9342

: 8d17f0de29daed0f3b4cd38f980683d01ec50729

没有这样的记录。

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

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

谢谢

假设您希望每个人都使用相同的固定密码,并且哈希仅由串联密码和盐的 SHA1 校验和组成,则只需执行以下操作:

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

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

或者,您可以临时添加一列"newpassword",使用类似于上述使用该列的 UPDATE 命令,然后将其删除。但这并不能解决如何将新密码提供给用户的问题。

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

您需要做的是添加另一列,并为其指定一个类似"hashtype"的名称 - 此名称指示条目是否已从旧哈希升级到新哈希。

然后在您的登录代码中,在用户提交其密码并根据存储的数据库哈希正确哈希后,使用用户输入的密码为每个新方法生成新的哈希,更新数据库中的哈希,并将哈希类型设置为新。

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

如果您有登录代码,则可以对其进行调试并检查其工作情况。为其创建适当的脚本,并使用以下查询更新密码。

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

试试这个