.net 我应该使用什么散列函数来散列小数值?

.net 我应该使用什么散列函数来散列小数值?,.net,security,hash,numbers,.net,Security,Hash,Numbers,在某些情况下,不允许组织使用或存储有用的密钥,如SSN号码、电话号码等 但是,这些唯一键对于匹配数据非常有用。因此,从理论上讲,如果数据提供者能够向您提供SSN的散列值,并且您要存储该散列并使用它进行匹配,那么您将永远不必使用或存储SSN 对于SSN之类的东西,什么是合适的哈希函数 因此,从理论上讲,如果数据提供者能够向您提供SSN的散列值,并且您要存储该散列并使用它进行匹配,那么您将永远不必使用或存储SSN 这是错误的;设计的散列不是唯一的,不能用于唯一标识任何内容。如果您必须唯一地标识某个东

在某些情况下,不允许组织使用或存储有用的密钥,如SSN号码、电话号码等

但是,这些唯一键对于匹配数据非常有用。因此,从理论上讲,如果数据提供者能够向您提供SSN的散列值,并且您要存储该散列并使用它进行匹配,那么您将永远不必使用或存储SSN

对于SSN之类的东西,什么是合适的哈希函数

因此,从理论上讲,如果数据提供者能够向您提供SSN的散列值,并且您要存储该散列并使用它进行匹配,那么您将永远不必使用或存储SSN


这是错误的;设计的散列不是唯一的,不能用于唯一标识任何内容。如果您必须唯一地标识某个东西,并且不允许使用其他人的标识符,那么您必须提出自己的标识符。这就是为什么像加油卡、电影租赁卡等东西都有自己独特的会员标识。

你需要像对待密码一样对待SSN。使用强而慢的散列算法对它们进行散列,例如或,使用唯一的每记录前缀和后缀salt


散列SSN的缺点是它们是可预测的,并且熵很小,这使得明文暴力非常容易。如果你能负担得起,我建议你为这类事情投资硬件保护。实际上,您应该完全这样做。

如果提供程序对一个数字进行散列,而我使用相同的算法对相同的数字进行散列,则散列值将是相同的。然后,我可以将输入哈希值的数据与输入相同哈希值的数据进行匹配。@Chris,如果提供程序对两个不同的数字进行哈希,则它们可以得到相同的哈希值。你可以将两个不同的SSN视为同一个SSN。我相信一个好的哈希算法的要点是减少或消除冲突的可能性,即使是对于小的输入。看看@HunterMcMillen,只要数据前后有大量的填充位数,填充位数就不必是特定的。通常,哈希函数以n位块处理数据,如果传入数据