MD5随机生成代码重复

时间:2014-03-03 08:59:44

标签: php

我使用md5和随机代码,当前日期时间和customer_id来生成哈希码,但在我运行200,000条记录后,我发现有许多重复记录。我该如何避免重复?

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

$curr_date = date('Y-m-d H:i:s');
$hash = md5(rand(0,100000)+strtotime(date('curr_date'))+$row[0]);

echo $query = "update customers set email_hash='$hash' where customer_id='$row[0]'";
mysql_query($query) or die(mysql_error());
}

4 个答案:

答案 0 :(得分:0)

而不是使用当前日期尝试使用时间()

的当前时间戳

$ hash = md5(rand(0,100000)+ strtotime(time())+ $ row [0]);

答案 1 :(得分:0)

问题是,对于多达数千个条目,时间可能相同,因为您只花费时间到秒。您也可以尝试使用毫秒和纳秒,或者在两代之间休眠。

但无论如何,使用另一个哈希算法会更安全地使用更多的比特用于哈希,这样就不太可能发生冲突。

答案 2 :(得分:0)

将时间戳添加到md5

$hash = md5(rand(0,100000)+strtotime(date('curr_date'))+$row[0])."_".time();

答案 3 :(得分:0)

  1. 您使用的是date()错误。

    date('c')
    
  2. 您正在添加数字而不是以字符串形式连接。

    rand(0,100000) . strtotime(date('c')) . $row[0]
    
  3. 因为你只使用极少数可能的明文用于散列。解决这两个问题将大大减少冲突次数。