在处理需要加密的数据时,检查值是否已存在

时间:2017-03-05 05:46:04

标签: php database encryption web bcrypt

我有一个很大的固定个人访问代码列表(此数组永远不会更改)。当用户在网站上注册时,我需要检查他们的个人访问代码是否已经存在于数组/数据库中,这是为了确保用户注册被授权。对于许多问题,这些访问代码不能以纯文本形式存储,因此必须加密。

我需要一种方法来快速检查系统中是否存在提供的访问代码,但是保存所有加密的内容。

现在我正在加密Bcrypt中的所有内容并仅存储哈希值。

我找到了两个解决方案,但似乎没有一个在我的条件下工作:

  1. 我在PHP中使用password_hash()散列了所有访问代码,然后将所有这些哈希值存储在一个数组中。为了检查给定的访问代码是否在我们的系统中,我在函数password_verify()上使用了for循环,用于比较用户给定数据和散列的数组中的每个值。这种方法是安全的,但效率非常低,我处理超过4k组哈希值,将来可能会增加到大约15k。接近数组末尾的哈希值大约需要3分钟,以便脚本在测试时完成执行。
  2. 每次加密数据时都使用相同的盐,这样我就可以轻松检查用户输入生成的哈希是否与存储在系统固定数据库中的任何哈希相匹配。这种方法很快但不安全。
  3. 有没有办法正确地为#1做这个或更高效的设置/语言?我假设必须有一个正确的方法来执行此操作,因为存储信用卡,SIN或其他敏感数据的相同技术将适用。

0 个答案:

没有答案