2010-10-20 86 views
1

在我的数据库中,我有超过600个用户。密码之前被存储为纯文本(掌握,我知道)。无论如何,我已经更改了我的代码来存储STA1哈希密码,但我需要转换数据库中的现有密码,以便每个用户不需要进入和修改其帐户。将数据库中的文本密码转换为散列密码?

任何帮助?

回答

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; 
+0

非常完美,非常感谢。每个人都差不多说了同样的话。这一切都很完美 – BigMike 2010-10-20 21:04:55

2

试试这个:

update your_table set passfield = sha1(passfield); 

在此之前作出适当的备份,因为你将无法扭转操作(这是一个HASH函数的整个目的)。

请记住,SHA1将返回HEX编码的二进制值。

2

如果你已经在用散列密码的数据库用户,那么要小心全部更换表立刻。您最终可能会将SHA1散列重新转换为新的SHA1散列。

如果您已经拥有使用哈希密码的新用户,请编写脚本查询数据库中所有密码,如果其长度小于40(或20,如果您将第二个参数设置为true),则生成新的基于当前密码的SHA1哈希(如果少于40个字符,您将知道它是明文),并将旧密码替换为新密码。