2011-09-11 62 views
0

我有一个名为user的数据库表,其中有一些列。其中一列是用户密码。MD5加密表中的所有密码

此密码未加密,我现在要做的是自动抓取该表中的所有用户和所有密码,对它们进行加密,并用新的加密密码更新表格。

我该怎么办?使用PHP循环?或者是什么?

我这里有点失去..

可否请你提供一个工作的例子吗?

所以我从表

$query="SELECT * FROM users"; 
$ar=mysql_query($query) or die("Error selecting accounts: ".mysql_error()); 
$ac = mysql_num_rows($ar); 
while($arow = mysql_fetch_array($ar)) { 
$password = $arow['Password']; 
} 
AND....... 

之后,我完全失去了选择的密码。

你能帮我吗?

谢谢

+5

这是不可能的,因为md5不是加密的。 –

+0

md5是一个无法解密的散列 – eric

回答

4

请将此代码输入到phpMyAdmin SQL查询页面。首先在phpMyAdmin中登录,然后选择DB和表格,然后单击“SQL”。然后,你需要在该领域进入这个并提交:

UPDATE users SET password = MD5(CONCAT(password, user_id)) 

编辑

的OP想实际的PHP代码:

$query = "UPDATE users SET password = MD5(CONCAT(password, user_id))"; 
$ok = mysql_query($query); 

不能得到任何比这更清晰。您必须确保密码字段足够大以存储md5散列。请记住,md5散列长度为32个字符。

+2

并且用salt:'UPDATE users SET password = MD5(CONCAT(password,user_id))' – arnaud576875

+0

是的,使用salt!谢谢阿诺。你必须记住,你使用盐虽然。 =) –

+0

请注意,如果您运行此查询两次,则永久丢失了所有密码。如果您运行此查询,则必须更改任何使用密码列的客户端代码才能期望MD5哈希值,而不是实际值。 – Andomar

0

DiegoP问的方式用PHP来做到这一点,就到这里吧(由于某种原因,我不能添加评论有..)

$db = Do database connection here; 
$query = "UPDATE users SET password = MD5(CONCAT(password, user_id))"; 
$doit = mysql_query($query, $db); 

编辑:如果要循环使用它

<?php 
$q = "SELECT * FROM users"; 
$s = mysql_query($q, $connection); 

for ($i = 0; $i < mysql_num_rows($s); $i++) { 
$uid = mysql_result($s, $i, "user_id"); 
$pass = mysql_result($s, $i, "password"); 
$s2 = mysql_query("UPDATE users SET password = MD5(CONCAT('".$pass."', '".$uid."')) WHERE user_id = '".$uid."'"); 
} 
?> 
+0

好吧,这很好。但我该如何自动执行?不知道用户ID更新。它应该发生在已经插入用户表的每个用户。由于我不知道确切的用户ID,因此我需要一种方法为已经在该表中的每个用户执行此操作。有没有办法用Loop做到这一点?或者是其他东西?谢谢 –

+0

是的,但我认为它已经自动?它从行中自动获取user_id? – Olli

+0

我添加了循环,所以如果你想尝试。 – Olli