我使用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());
}
答案 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)
您使用的是date()
错误。
date('c')
您正在添加数字而不是以字符串形式连接。
rand(0,100000) . strtotime(date('c')) . $row[0]
因为你只使用极少数可能的明文用于散列。解决这两个问题将大大减少冲突次数。