我有一个需要社会安全号码的表单,我需要编写代码来检查它是否在过去两天内输入。这一切都很简单。
我当前的计划是创建一个表ssn_hash(id, ssn_hash, date)
并对 ssn 进行哈希/加盐,然后将它们插入数据库。之后,创建一个显示过去两天的 View 。盐是从表单中获取的一些其他用户数据。
我想知道两件事:
- 这是一个好方法吗?或者是否有其他一些常见的做法可以达到相同的结果。
- 在 PHP 下,std 库中的唯一选项是 crypt() 函数吗?
最佳答案
crypt
完全没问题,但有以下注意事项:
- 如果您使用用户数据作为盐,则会严重限制其随机性。选择类似
openssl_random_pseudo_bytes
的内容。 - 不要害怕将盐存放在 table 上。事实上,流行的 Ruby on Rails gem 就是这样做的。只需确保为每个条目生成唯一的盐即可。切勿重复使用盐。
- 确保您没有使用损坏的加密方法,例如 DES 或 SHA-1。您可以指定
CRYPT_BLOWFISH
或CRYPT_SHA512
。
关于php - 社会保障/政府 ID 号的哈希和盐的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448191/