是否可以通过使用一些标题来对电子邮件进行重复数据删除,因为根据RFC,它们的message-id应该是唯一的?
有没有办法计算下面这个重复数据删除方法中丢失1个单个电子邮件的机会(这3个标题的sha512哈希)?
// $email is a parsed array containing 3 keys (mime headers) -> message_id, subject and date.
$hashStr = $email['message_id'];
$hashStr .= $email['subject'];
$hashStr .= $email['date'];
$uniqueEmailId = hash('sha512', $hashStr);
关键任务是不会遗漏任何单个电子邮件,我们可能需要对几个(> 2亿)mime文件进行重复数据删除。
答案 0 :(得分:4)
SHA512哈希产生具有512位数据的哈希值。假设比特的随机分布,这可能超过1.34e + 154个可能的值。即使有超过2e + 9个样本,意外碰撞的可能性也几乎为零。
但是,您对哈希的输入并不是那么随机。 message_id
是globally unique identifier,只有""具有5.3e + 36个可能值,随机性取决于实现。根据维基链接,碰撞的几率在4.2e + 18个样本时约为50%。电子邮件地址和日期可能会明显高于此。
那就是说,如果没有实际进行概率数学计算,我会说赔率几乎可以忽略不计。
答案 1 :(得分:2)
如果message-id已经是唯一的,那么哈希就没有什么意义了(因此引入了可忽略不计的碰撞机会)。
似乎更强大的方法是使用message-id本身作为比较的基础。