我有一个类似的问题:
一个人开始为“A公司”做顾问。他们的人力资源人员为他们建立了一个帐户。在“person”表和“person company”表中为人员创建记录。
此人还为“B公司”(A公司可能知道也可能不知道)工作。当B公司输入他们的信息时,他们不应该在“个人”中创建记录,而应该在“个人公司”中创建记录。
该人员需要为州进行培训,因此,如果他们在进行培训时登录到任何一家公司的网站,我们希望总时间与该人员保持在一起。
我可以为person表设置一个PK,然后将它们连接到每个公司,但是我想我需要一些东西,比如person的SSN的散列,加上一些额外的“xyz”,以便能够进行查找。B公司会为此人提供SSN,这应该是通用的。
问题:
1)有没有其他方法可以加入到你们中的一个,认为会更好的工作?
2)如果我使用散列SSN方法,那么对于MySQL/PHP,使用哪种加密方式进行单向加密最好?
我在其他地方读到,公钥/私钥解决方案可能是最好的,但由于此人最初没有建立自己的帐户,我不确定这将如何工作。
谢谢
最佳答案
我认为this article可能与你的工作非常相关。如果出于安全原因和法律责任,您确实希望“匿名”ssn,那么仅仅对它们进行散列是不够的。
对它们进行散列将是一个完全确定的过程,因此要有效地“屏蔽”单个ssn,该过程需要随机化。否则,您只需通过ssn的所有可能组合强制执行(这比尝试强制执行hash函数所需的工作量要少得多)并寻找匹配的值。
要了解为什么会出现这种情况,请举一个最简单的例子,SSN可以只接受两个值0和1。不管散列函数的质量和强度如何,最终只有两种可能的结果,很容易看出哪一种是哪一种。
这是一个古老的游戏,为什么你不应该直接散列密码,而不是先对它们进行一些预处理。底层数据没有包含足够的熵,因此在预计算的表中很容易查找。
当您的ssn成为私有和机密时(它们不是在每个国家都有,所以请原谅我在评论中的愚蠢问题:),同样用于密码存储的最佳实践也应该适用于您的特定情况,也就是说,一种缓慢的自适应散列算法,它弥补了初始熵的不足,如bcrypt、scrypt和PBKDF2(这已经被Marcus Adams推荐)。
关于mysql - 替代散列SSN作为MySQL中的 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10486025/