当前位置: 首页 > 知识库问答 >
问题:

如何搜索由libnail加密的数据库列?

叶举
2023-03-14

我用钠来加密存储在数据库中的个人数据。我可以愉快地加密和解密存储的数据。在数据库中存储时,我正在加密名字和姓氏、电话号码、电子邮件地址等。

然而,我不知道如何搜索加密数据。任何人都能给出加密数据然后搜索数据的指针吗?

例如,我需要按名字、姓氏等进行搜索,但这是加密的。

我用这段代码搜索并认为对名称进行加密是“愚蠢的”,但这当然会对其进行重新加密,然后与实际记录不同。

public function searchStaff($string) {
  $this->db->query('SELECT * FROM staff WHERE lastName IN (:unEncrypted, :encrypted)');
  $this->db->bind(':unEncrypted', $string);
  $this->db->bind(':encrypted', $string);
  $results = $this->db->resultSet();
  return $results;
}

我甚至不知道该怎么做,到目前为止,我唯一的想法是解密每一行,检查并返回,但这是一种明显有缺陷的看待方式,尤其是当表变大时!

我正在使用下面的代码在列中创建加密条目。我目前唯一的想法是将$nonce存储在数据库行中,然后使用它依次解密每一行?但这将产生巨大的开销??

人们如何确保个人数据的安全?

//create random number
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

//encrypt the input
//to encrypt the value we pass it to sodium_crypto_secretbox() with our key
//and a $nonce. The nonce is generated using random_bytes(), because the 
//same nonce should never be reused.

$cipher = sodium_crypto_secretbox($data, $nonce, CRYPTOKEY);

//This presents a problem because we need the nonce to decrypt the value 
//later.
//Luckily, nonces don’t have to be kept secret so we can prepend it to our 
//$ciphertext then base64_encode() the value before saving it to the 
//database.

$encoded = base64_encode($nonce . $cipher);

sodium_memzero($data);

return $encoded;

共有1个答案

夏青青
2023-03-14

从根本上讲如果数据已加密,则无法对其进行搜索。解密每个记录以查看其是否包含特定值是非常难以管理的。

在这种情况下,我认为加密是不必要的。信用卡号码等真正秘密的信息可能需要加密,例如为了满足“PCI合规性”标准,但这些数据永远不会被“搜索”我认为加密姓名和地址等东西没有价值。只需确保权限改造规则适合您的数据库。

 类似资料:
  • 假设我有一个存储加密文本的服务器(端到端:服务器永远看不到纯文本)。 我希望能够对该文本进行全文搜索。 我知道这很棘手,但我的想法是使用传统的全文设计(“列表”和“匹配”表,其中存储单词并与内容表中的id匹配)。当用户提交加密文本时,他们还会发送单词和各自匹配的加盐MD5。使用的盐对于每个用户都是唯一的,并且从他们的密码中恢复。 (简而言之:唯一的区别是“列表”表将包含哈希单词) 现在,这个系统会

  • 问题内容: 我是使用Redis DB的新手。在阅读了一些文档并浏览了Internet上的一些示例并扫描了stackoverflow.com之后,我可以看到Redis速度非常快,可扩展性很好,但这要付出代价,我们必须考虑一下数据的处理方式在设计时访问它们,以及它们将要执行的操作。我能理解这一点,但对于使用普通的旧SQL这么简单却又缓慢地在数据中搜索感到有些困惑。我可以用KEY命令以一种方式完成此操作

  • 问题内容: 我在输入时搜索用户。但是最后它返回了每个用户。我不知道为什么会这样。好像还好 问题答案: 您正在使用。从文档中: 由返回的实例 将响应节点上具有大于startValue或等于startValue且键大于或等于childKey的值的事件。 因此请记住,如果您搜索某个用户的,则会为所有名称按字母顺序大于给定名称的用户提供。您需要设置a 以限制查询范围。 Firebase旧版文档是了解Fir

  • 问题内容: 我如何从mysql类语句以外的mysql数据库中的序列化字段中搜索? 数据为: 我需要其中m9值为“是,是”的行。我不想使用mysql的“ like”语句。 我努力了: 你能帮忙吗? 问题答案: 我发现一种使用正则表达式的解决方案: 希望这可以帮助: http://www.namasteui.com/search-from-serialize-field-in-mysql- datab

  • 请问下,我在运行的时候报错: 没有这个三方库: 但是我的cocoapods没有安装。 下载的代码如下: 请问这个问题如何进行添加库到可搜索处理呢?

  • 查看其他关于堆栈溢出的问题,有人说这可能是因为valueEventListener的位置不正确,但...不是吗?我正在钻进食物条目/营养条目,但我不知道如何钻进更深。没办法匿名给孩子打电话?我尝试调用childEventListener而不是valueEventListener,其他的都一样,但我再也没有得到那个消息,但我仍然无法检索到我想要的数据。 编辑: 谢谢你到目前为止的帮助。根据下面Has