6

问题描述: 我正在处理一个高度敏感的数据集,其中包含人们的电话号码信息作为列之一。我需要应用(对它们进行加密/散列函数)将它们转换为一些编码值并进行分析。它可以是单向散列 - 即,在处理加密数据后,我们不会将它们转换回原始电话号码。本质上,我正在寻找一个匿名器,它可以获取电话号码并将它们转换为一些我可以进行处理的随机值。建议执行此过程的最佳方法。欢迎就使用的最佳算法提出建议。

更新:数据 集的大小 我的数据集非常大,有数百 GB。

更新:敏感 敏感,我的意思是电话号码不应该是我们分析的一部分。所以,基本上我需要一个单向散列函数但没有冗余 - 每个电话号码应该映射到唯一的值 - 两个电话号码应该不映射到相同的值。

更新:实施?

感谢您的回答。我正在寻找详细的实现。我正在通过 python 的 hashlib 库进行散列,它是否一定会执行您建议的相同步骤?链接在这里

你能给我一些示例代码来实现这个过程,最好是在 Python 中吗?

4

4 回答 4

4

为您的数据集(16 或 32 字节)生成密钥并保密。使用此密钥对您的数据使用Hmac-sha1 ,然后使用 base 64 对其进行编码,并且每个电话号码都有一个随机的唯一字符串,该字符串不可逆(没有密钥)。

使用Keyczar的示例(具有 256 位密钥的 Hmac-Sha1):

创建随机密钥:

$> python keyczart.py create --location=path_to_key_set --purpose=sign
$> python keyczart.py addkey --location=path_to_key_set --status=primary

匿名电话号码:

from keyczar import keyczar

def anonymize(phone_num):
  signer = keyczar.Signer.Read("path_to_key_set");
  return signer.Sign(phone_num)
于 2013-04-08T21:07:01.093 回答
1

如果您要使用密码学,您希望对每个电话号码应用伪随机函数并丢弃密钥。诸如 SHA-256 之类的防冲突散列不能提供正确的安全保证。但是,真的有这么多不同的电话号码,您不能只是逐步构建一个表示实际随机函数的地图吗?

于 2013-04-08T21:32:29.600 回答
1

按相应的列对数据进行排序并开始计算不同的值...用它们各自的计数器值替换实际值...无冲突...一种方式...

于 2013-04-08T23:05:24.477 回答
-1

所以,基本上我需要一个单向散列函数,但没有冗余——每个电话号码应该映射到唯一的值——两个电话号码不应该映射到相同的值。

这需要基于加密哈希函数的解决方案。MD5 和 SHA-1 是最著名的例子,并且在这方面工作得很好。您会读到“MD5 已被破解”,但对于您的目的而言,这并不重要。

于 2013-04-08T22:55:29.943 回答