将数据库中的文本密码转换为哈希密码?

时间:2010-10-20 20:49:00

标签: php mysql password-protection

在我的数据库中,我有超过600个用户。这些密码以前都是以纯文本形式存储的(我知道,这是手头的一巴掌)。无论如何,我已将我的代码更改为存储STA1哈希密码,但我需要转换数据库中的现有密码,以便每个用户无需进入并修改其帐户。

任何帮助?

3 个答案:

答案 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个字符,您将知道它是纯文本)并用新密码替换旧密码。