個人の個人情報、特に名前、生年月日、性別、人種を比較しています。この情報をすべて含む文字列をハッシュし、ハッシュ オブジェクトの 16 進ダイジェストを比較しています。これにより、データベースの主キーとして使用している 32 桁の 16 進数が生成されます。たとえば、識別文字列を使用すると、次のようになります。
>> 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 桁の 16 進数のダイジェストを使用しています。
さて、16 進ダイジェストはダイジェストを圧縮したもの (つまり、より少ない文字数で格納されている) だと思います。それとも私は基地外ですか?