我通过散列包含所有这些信息的字符串并比较散列对象的十六进制摘要来比较个人的个人信息,特别是他们的姓名、出生日期、性别和种族。这会产生一个 32 位的十六进制数,我将其用作数据库中的主键。例如,使用我的识别字符串将像这样工作:
>> import hashlib
>> id_string = "BrianPeterson08041993MW"
>> byte_string = id_string.encode('utf-8')
>> hash_id = hashlib.md5(bytesring).hexdigest()
>> print(hash_id)
'3b807ad8a8b3a3569f098a575091bc79'
在这一点上,我正在尝试确定碰撞风险。我的理解是 MD5 没有明显的碰撞风险,至少对于我的相对较小的字符串(长度约为 20-40 个字符)而言。但是,我使用的不是 128 位摘要对象,而是 32 位十六进制摘要。
现在,我相信 hexdigest 是对摘要的压缩(也就是说,它存储在更少的字符中),所以在比较 hexdigest 时不会增加冲突的风险吗?还是我不在基地?