我正在比较个人信息,具体包括姓名、出生日期、性别和种族。我通过哈希一个包含所有这些信息的字符串,并比较哈希对象的十六进制摘要来进行比较。这会产生一个32位的十六进制数字,我将其用作数据库中的主键。例如,使用我的标识字符串将按以下方式工作:
>> import hashlib
>> id_string = "BrianPeterson08041993MW"
>> byte_string = id_string.encode('utf-8')
>> hash_id = hashlib.md5(bytesring).hexdigest()
>> print(hash_id)
'3b807ad8a8b3a3569f098a575091bc79'
目前,我正在尝试确定碰撞风险。我的理解是,在字符串相对较小的情况下(大约20-40个字符),MD5没有显着的碰撞风险。但是,我并没有使用128位摘要对象,而是32位十六进制摘要。
现在,我认为十六进制摘要是摘要的压缩形式(即它存储在较少的字符中),因此在比较十六进制摘要时是否存在增加的碰撞风险?还是我误解了?