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

Php 在处理需要加密的数据时,检查值是否已存在,php,database,encryption,web,bcrypt,Php,Database,Encryption,Web,Bcrypt,我有一个很大的固定的个人访问代码列表(这个数组永远不会改变)。当用户在站点上注册时,我需要检查他们的个人访问代码是否已经存在于阵列/数据库中,这是为了确保注册的用户有权访问。出于许多考虑,这些访问码不能以纯文本形式存储,因此必须对其进行加密 我需要一种方法来快速检查系统中是否存在提供的访问代码,但将所有内容都加密存储 现在我在Bcrypt中加密所有内容,并且只存储散列 我找到了两种解决方案,但在我的情况下似乎没有一种有效: 我在PHP中使用password_hash()散列所有访问代码,然后将所

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

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

现在我在Bcrypt中加密所有内容,并且只存储散列

我找到了两种解决方案,但在我的情况下似乎没有一种有效:

  • 我在PHP中使用password_hash()散列所有访问代码,然后将所有这些散列存储在一个数组中。为了检查给定的访问代码是否在我们的系统中,我在函数password_verify()上使用for循环,对数组中的每个值比较用户给定的数据和散列。这种方法是安全的,但效率非常低,我正在处理超过4k的散列集,将来可能会增加到15k左右。在测试过程中,数组末尾附近的散列可能需要大约3分钟才能完成脚本的执行
  • 每次加密数据时使用相同的salt,这样我就可以轻松地检查从用户输入生成的哈希是否与存储在系统固定数据库中的任何哈希匹配。这种方法快速但不安全

  • 是否有任何方法可以正确地执行此操作或使用更高效的设置/语言来#1?我认为必须有一种正确的方法来实现这一点,因为存储信用卡、SIN或其他敏感数据的技术同样适用。

    因此,如果您试图从加密字符串返回,我建议您查看AES。否则,我建议您研究一些哈希算法。类似SHA-256的东西。也许您也想将盐存储在数据库中?@iSNSD09 1。密码有多长?2.为了在数据库中找到散列访问代码,您不能同时为潜在用户提供一个标识符吗?因此,如果您试图从加密字符串返回,我建议您查看AES。否则,我建议您研究一些哈希算法。类似SHA-256的东西。也许您也想将盐存储在数据库中?@iSNSD09 1。密码有多长?2.为了在数据库中找到散列访问代码,您不能同时为潜在用户提供一个标识符吗?