【问题标题】:10-char hash of an email电子邮件的 10 字符哈希
【发布时间】:2011-12-12 10:58:30
【问题描述】:

使用 10 个字符的哈希值来识别电子邮件地址的可靠性如何?

MailChimp 有 10 个字符的字母数字 ID 用于电子邮件地址。 10 个字符 4 位,每个 40 位,略超过一万亿。也许对于像 MailChimp 这样规模的企业来说,这为唯一索引空间提供了合理的空间,并且他们有一个包含所有可能电子邮件的表,并使用 40 位数字进行索引。

我喜欢使用相同样式的哈希或编码 ID 来包含在链接中。要决定是使用索引还是哈希,需要估计两个有效电子邮件地址导致相同 10 字符哈希的概率。

除了原始测试之外,任何关于评估自定义散列函数的提示?

【问题讨论】:

  • Google 生日悖论。对于 40 位散列,如果项目数接近 20 位(~2E6),则冲突几率达到 0.5(即:整个集合至少发生一次冲突的几率为 0.5)
  • @wildpasser 感谢生日悖论的提示!
  • 任何位键的改变都应该改变散列函数的行为。 burtleburtle.net/bob/hash/doobs.html

标签: algorithm email hash mailchimp


【解决方案1】:

您没有明确说明“可靠”是什么意思,但我认为您是在努力避免冲突。正如 wildplasser 所说,对于随机标识符,这完全是关于生日悖论,当使用 2^(n/2) 个 ID 时,在具有 2^n 个 ID 的标识符空间中发生冲突的可能性达到 50%。

Birthday Attacks 上的维基百科页面有一个很好的表格,说明了各种参数下的碰撞概率;例如,对于 64 位和期望的最大碰撞概率为百万分之一,您可以拥有大约 600 万个标识符。

请记住,用字符表示数据的方法比十六进制更有效;例如,base64 每 4 个字符为您提供 3 个字节,这意味着 10 个字符为您提供 60 位,而不是 40 位十六进制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2011-11-10
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2018-01-24
    相关资源
    最近更新 更多