首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子邮件重复数据删除

电子邮件重复数据删除
EN

Stack Overflow用户
提问于 2014-04-03 23:06:24
回答 3查看 1K关注 0票数 6

根据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);

这是一种关键的任务,不会遗漏任何一封电子邮件,很可能我们必须对几个(>20)亿个mime文件进行重复数据删除。

EN

回答 3

Stack Overflow用户

发布于 2014-04-16 02:38:56

SHA512散列产生具有512位数据的散列值。假设位的随机分布,则计算出的值大于1.34e+154可能的值。即使有过多的2e+9样本,意外碰撞的可能性也非常接近于零。

但是,您对散列的输入并不是完全随机的。message_id是一个“唯一”具有5.3e+36个可能值的globally unique identifier,其随机性取决于实现。根据维基链接,在4.2e+18样本中发生碰撞的几率约为50%。电子邮件地址和日期可能比这要高得多。

也就是说,在没有真正做概率数学的情况下,我会说概率可以忽略不计。

票数 4
EN

Stack Overflow用户

发布于 2014-04-22 05:46:08

如果message-id已经是唯一的,那么散列就没有什么意义(因此引入了公认可以忽略不计的冲突机会)。

似乎更健壮的方法是使用message-id本身作为比较的基础。

票数 2
EN

Stack Overflow用户

发布于 2022-01-29 09:35:38

即使RFC说Message-ID必须是全局唯一的,它仍然是生成这些标头的发送者。

您不能相信发件人是否符合RFC (如果发件人软件不受您的控制)。

原始发送者可能不想生成全局唯一的Message-ID,或者他正在使用具有相同Message-ID的模板向不同的收件人发送副本。

我不知道有没有电子邮件服务器可以验证Message-ID头的唯一性。

如果你想对电子邮件进行重复数据删除,最好的解决方案是用足够的比特计算其整个内容的加密安全散列。IMHO 160位足够20亿。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22841666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档