【发布时间】: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