Php 社会保险/政府ID号的哈希和盐替代方案

Php 社会保险/政府ID号的哈希和盐替代方案,php,mysql,encryption,hash,salt,Php,Mysql,Encryption,Hash,Salt,我有一张表格,上面有一个社会保险号码,我需要写代码来检查它是否在过去两天内输入。这一切都很容易 我目前的计划是创建一个表ssn\u hash(id,ssn\u hash,date)和ssn的hash/salt,然后将它们插入数据库。之后,创建一个显示持续两天的时间的视图。salt是从表单中获取的一些其他用户数据 我想知道两件事: 这是一个好方法吗?或者还有其他一些常见的做法可以达到同样的效果 在PHP下,std库中唯一的选项是crypt()函数吗 crypt非常好,但需要注意以下几点: 如果将

我有一张表格,上面有一个社会保险号码,我需要写代码来检查它是否在过去两天内输入。这一切都很容易

我目前的计划是创建一个表
ssn\u hash(id,ssn\u hash,date)
和ssn的hash/salt,然后将它们插入数据库。之后,创建一个显示持续两天的时间的视图。salt是从表单中获取的一些其他用户数据

我想知道两件事:

  • 这是一个好方法吗?或者还有其他一些常见的做法可以达到同样的效果
  • 在PHP下,std库中唯一的选项是crypt()函数吗

  • crypt
    非常好,但需要注意以下几点:

    • 如果将用户数据用作salt,则会严重限制其随机性。选择类似于
      openssl\u random\u pseudo\u bytes
      的内容
    • 不要害怕把盐放在桌子上。事实上,
      attr_encrypted
      ,一个流行的RubyonRails gem就是这样做的。只需确保为每个条目生成唯一的salt即可。不要重复使用盐
    • 确保不要使用像DES或SHA-1这样的坏加密方法。您可以指定
      CRYPT\u-BLOWFISH
      CRYPT\u-SHA512

    如果您需要快速查找以查看该号码是否已被使用,则密码加密功能将无法帮助您。相反,您必须使用直接的SHA1类型散列,以便进行反向查找


    您需要绝对确保您的服务器安全可靠。定期清除此表中的数据也可能是一个好主意。

    是crypt的替代方案吗?sha命令?PHP似乎没有
    sha()
    命令,而且
    sha1()
    不允许我指定salt。对于其他的事情,这是可以的,但我希望每用户盐。你能详细说明吗?为什么将盐存储在数据库中不是一个安全风险。好问题,请查看这篇文章。谢谢。我不确定我是否理解加密是没有帮助的。在这种情况下,只有加密函数需要知道ssn和salt,我不需要,应用程序也不需要。每次查询数据库时重新生成散列数是不是一个坏主意?salt的问题是每次它发生变化时,因此确定SSN x是否在数据库中就变成了扫描每一行并测试给定x参数的情况。如果你只是散列,它会变成一个快速查找,匹配或不匹配。