【发布时间】:2010-07-27 00:52:54
【问题描述】:
我继承了一个拥有大量用户群的网站。我的客户正在更新他们的记录,我需要将大约 900 个用户的一些预定密码导入 mysql 表。如果我通过 php 前端输入密码,我要导入的行似乎对密码进行了加密。我可以使用 phpMyAdmin 将所有密码导入表中,但是当我测试它们时它们不起作用,因为它们是未加密的格式。有没有办法在将密码导入表之前对其进行加密?
【问题讨论】:
我继承了一个拥有大量用户群的网站。我的客户正在更新他们的记录,我需要将大约 900 个用户的一些预定密码导入 mysql 表。如果我通过 php 前端输入密码,我要导入的行似乎对密码进行了加密。我可以使用 phpMyAdmin 将所有密码导入表中,但是当我测试它们时它们不起作用,因为它们是未加密的格式。有没有办法在将密码导入表之前对其进行加密?
【问题讨论】:
您的问题不是 100% 清楚,但我假设您的密码存储在 MySQL 加密的列中。
为了在导入之前“加密密码”,您必须弄清楚正在使用的加密算法。这将涉及查看数据库架构和插入其中的代码、查找执行加密的位置以及识别算法。
完成此操作后,请提前使用相同的算法来加密密码。
【讨论】:
您应该编写一个脚本来使用应用所期望的相同加密方法导入密码。
您应该阅读 PHP 前端的源代码,以了解用于加密(或更可能是散列)密码的方法。在不研究他们的代码的情况下尝试猜测他们的方法是浪费时间。
根据散列的方法,您也许可以将已导入的明文密码转换为散列版本,只需使用 SQL 更新。例如,如果它是 SHA1,那么你可以这样做:
UPDATE accounts SET password = SHA(password)
这将覆盖密码及其哈希值。请记住,哈希不是可逆的,因此在尝试之前先备份数据库!
我也推荐阅读无畏领袖的You're Probably Storing Passwords Incorrectly。
【讨论】:
已解决:
更新用户 SET user_password = md5(user_password)
感谢大家的意见。
【讨论】: