【问题标题】:Will hashing two eual strings give same hash value有两个相等的字符串会给出相同的哈希值
【发布时间】:2018-05-21 08:00:50
【问题描述】:

我需要匿名化 MySql 数据库中的个人数据。问题是我仍然需要能够将两个人匿名化后联系在一起。

我认为这可以通过散列他们的社会安全号码或电子邮件地址来完成,这导致了我的问题:

当散列两个相等的字符串(s1 和 s1)时,我得到两个散列值(h1 和 h2),我怎么能确定:

1) 哈希值相等 (h1 = h2)

2) 不等于 (s3 = s1) 会产生相同的哈希值

【问题讨论】:

  • 散列函数理论上可以发生冲突。在这一点上,使用每个用户的 SSN 作为唯一标识符对我来说似乎已经足够了。为什么需要散列来比较用户?
  • 您的要求是加密哈希函数的要求。如果两个相等的字符串没有输出相同的哈希值,那么您的哈希函数就会损坏。同样,如果两个不相等的字符串产生相同的哈希(称为冲突),那么您的哈希函数也会损坏。
  • @Robbie 大多数情况下,我认为您会假设至少有可能发生碰撞,并且只是为这种情况做计划。
  • @TimBiegeleisen 同一个用户(同一个 SSN)可以在同一个数据库表中有多个条目。出于统计原因,即使在 SSN 被匿名化后,我也需要能够连接它们——这就是我考虑散列 SSN 的原因

标签: mysql security hash data-security


【解决方案1】:

1) 相同的字符串总是会产生相同的哈希值
2)如果您选择与数据量相比较小的哈希长度,理论上不同的字符串可能会产生相同的哈希。但使用默认哈希长度(32 或 40)不会导致此类问题。

【讨论】:

    【解决方案2】:

    1) (h1 = h2) 对于每个定义的相等字符串(s1 和 s2)总是正确的,当使用正确的散列函数时。

    2) 两个不同的字符串可以有相同的哈希值。这被称为“碰撞”。概率取决于使用的散列函数和生成的散列的长度。以 MD5 为例,有用于查找冲突的网站和表格,这非常有趣。

    我不确定你所说的将人们联系在一起是什么意思,或者你的要求是什么,所以我无法帮助你。但是你可以用他们的 id 把两个人联系起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2016-08-17
      • 1970-01-01
      相关资源
      最近更新 更多