在我的数据库中,我有超过600个用户。这些密码以前都是以纯文本形式存储的(我知道,这是手头的一巴掌)。无论如何,我已将我的代码更改为存储STA1哈希密码,但我需要转换数据库中的现有密码,以便每个用户无需进入并修改其帐户。
任何帮助?
答案 0 :(得分:2)
试试这个:
update your_table set passfield = sha1(passfield);
在执行此操作之前进行适当的备份,因为您将无法撤消操作(这是HASH功能的全部目的)。
请记住,SHA1将返回二进制值的HEX编码。
答案 1 :(得分:2)
首先,使用mysqldump备份数据库。例如
bash#> mysqldump -u username -p nameoftable >file_to_write_to.sql
此外,请确保您的密码字段长度为40个字符。如果没有,请执行以下SQL命令:
alter table nameoftable modify column password varchar(40);
然后更改密码:
update nameoftable set password=sha1(password) where 1;
答案 2 :(得分:2)
如果数据库中的用户已经有散列密码,那么请注意一次更换所有表。您最终可能会将SHA1哈希再次转换为新的SHA1哈希值。
如果您已经拥有散列密码的新用户,请编写一个脚本,查询数据库中是否有所有密码,如果长度小于40(如果您将第二个参数设置为true,则为20)然后生成新的SHA1基于当前密码的哈希值(如果它少于40个字符,您将知道它是纯文本)并用新密码替换旧密码。