如果您想搜索仅这些凭据的人,您可以将 SHA-1 存储在数据库中(或 MD5 以提高速度,除非您喜欢以千万亿人为样本)。
哈希将毫无价值,因为它不存储有关此人的信息,但它可以用于搜索数据库。您只想确保这三条信息匹配,因此将它们连接起来是安全的:
user.hash = SHA1(user.firstName + user.DOB + user.lastName)
当你查询时,你可以检查两者是否匹配:
hash = SHA1(query.firstName + query.DOB + query.lastName)
for user in database:
if user.hash == hash:
return user
我把query.DOB放在中间是因为名字和姓氏可能会发生冲突,就像JohnDoe Bob和John DoeBob在同一天出生一样。我不知道数字名称,所以我认为这将阻止像这样的冲突;)
但如果这是一个大数据库,我会尝试 MD5。它更快,但有可能发生碰撞(在你的情况下,我可以保证不会发生碰撞)。然而,发生碰撞的可能性真的很小。
从这个角度来看,碰撞是1 / 2^128 的发生,即:
1
---------------------------------------------------
340,282,366,920,938,463,463,374,607,431,768,211,456
这比:
0.0000000000000000000000000000000000000293873 %
我很漂亮确定你不会发生碰撞;)