【问题标题】:Convert unique numbers to md5 hash using pandas使用 pandas 将唯一数字转换为 md5 哈希
【发布时间】:2015-04-24 19:10:09
【问题描述】:

大家早上好。

我想将我的社会保险号转换为 md5 哈希十六进制数字。结果应该是每个社会保险号的唯一 md5 哈希十六进制数。

我的数据格式如下:

ob = onboard[['regions','lname','ssno']][:10]
ob

    regions lname   ssno
0    Northern Region (R1)    Banderas    123456789
1    Northern Region (R1)    Garfield    234567891
2    Northern Region (R1)    Pacino  345678912
3    Northern Region (R1)    Baldwin     456789123
4    Northern Region (R1)    Brody   567891234
5    Northern Region (R1)    Johnson     6789123456
6    Northern Region (R1)    Guinness    7890123456
7    Northern Region (R1)    Hopkins     891234567
8    Northern Region (R1)    Paul    891234567
9    Northern Region (R1)    Arkin   987654321

我使用hashlib尝试了以下代码:

import hashlib

ob['md5'] = hashlib.md5(['ssno'])

这给了我一个错误,它必须是一个字符串而不是一个列表。所以我尝试了以下方法:

ob['md5'] = hashlib.md5('ssno').hexdigest()



regions lname   ssno    md5
0    Northern Region (R1)    Banderas    123456789   a1b3ec3d8a026d392ad551701ad7881e
1    Northern Region (R1)    Garfield    234567891   a1b3ec3d8a026d392ad551701ad7881e
2    Northern Region (R1)    Pacino  345678912   a1b3ec3d8a026d392ad551701ad7881e
3    Northern Region (R1)    Baldwin     456789123   a1b3ec3d8a026d392ad551701ad7881e
4    Northern Region (R1)    Brody   567891234   a1b3ec3d8a026d392ad551701ad7881e
5    Northern Region (R1)    Johnson     678912345   a1b3ec3d8a026d392ad551701ad7881e
6    Northern Region (R1)    Johnson     789123456   a1b3ec3d8a026d392ad551701ad7881e
7    Northern Region (R1)    Guiness     891234567   a1b3ec3d8a026d392ad551701ad7881e
8    Northern Region (R1)    Hopkins     912345678   a1b3ec3d8a026d392ad551701ad7881e
9    Northern Region (R1)    Paul    159753456   a1b3ec3d8a026d392ad551701ad7881e

这与我需要的非常接近,但无论社会保险号是否不同,所有十六进制数字都相同。我正在尝试为每个社会安全号码获取一个具有唯一十六进制数字的十六进制数字。

有什么建议吗?

【问题讨论】:

  • 不要散列社会安全号码并认为它​​提供了任何类型的混淆。社会安全号码空间很小,其中的未加盐哈希对于任何人来说都是微不足道的。如果你关心你正在散列的个人信息的隐私,你至少应该使用 hmac 模块,而不仅仅是一个直接的散列。
  • 非常感谢您抽出宝贵时间回复此评论!超值!我不知道哈希可以反转。我将研究 hmac 模块。再次感谢您!

标签: python python-2.7 pandas hashlib pandasql


【解决方案1】:

hashlib.md5 将单个字符串作为输入——您不能像使用某些 NumPy/Pandas 函数那样将值数组传递给它。因此,您可以使用 list comprehension 来构建 md5sum 列表:

ob['md5'] = [hashlib.md5(val).hexdigest() for val in ob['ssno']]

【讨论】:

  • 绝对,漂亮!说得通。感谢您教育我并协助解决问题!正是我需要的!
  • 对于任何点击“需要支持缓冲区 API 的对象”错误的人,可能会导致您的 Pandas 系列中的 null (NaN) 值可能需要在散列之前进行处理或删除。
【解决方案2】:

如果您要散列到 SHA256,您需要先将您的字符串编码为(可能)UTF-8:

ob['sha256'] = [hashlib.sha256(val.encode('UTF-8')).hexdigest() for val in ob['ssno']]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多