解密不适用于在加密数据上使用解密值查询的记录

Posted

技术标签:

【中文标题】解密不适用于在加密数据上使用解密值查询的记录【英文标题】:Decryption doesn't work for records querying with decrypted value on encrypted one 【发布时间】:2020-08-17 13:09:37 【问题描述】:

我有一个用户表,我需要在其中以加密格式存储电子邮件。我可以通过在用户模型中将加密的值设置为 true 来做到这一点。但是当我试图根据电子邮件 ID 获取该数据时。我以纯文本格式传递电子邮件 ID,没有加密值,并尝试查找具有该值的记录。但我找不到总是值是空的。

有什么方法可以查询带有解密值并且存储的值是加密格式的记录吗??

以下是我正在尝试执行的代码 sn-p。

module.exports = 

  attributes: 

    //  ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦  ╦╔═╗╔═╗
    //  ╠═╝╠╦╝║║║║║ ║ ║╚╗╔╝║╣ ╚═╗
    //  ╩  ╩╚═╩╩ ╩╩ ╩ ╩ ╚╝ ╚═╝╚═╝
    email:  
      type: 'string',
      required: true,
      isEmail: true,
      encrypt: true,
      maxLength: 512,
    
  

在表格中保存记录

await User.create(email: 'abc@domain.com')

使用此电子邮件查找记录

let userData = await User.find(email: 'abc@domain.com').decrypt();
console.log('user Data', userData)

我得到的输出是空数组而不是匹配记录的数组

user data []

我也试过不解密。它也给出了空值。

【问题讨论】:

【参考方案1】:

当然,加密电子邮件等数据库字段的全部目的是使网络爬虫很难搜索特定值。

您可以在搜索之前尝试加密您的搜索值......类似这样。

const emailEncrypted = 'abc@domain.com'.encrypt()
let userData = await User.find(email: emailEncrypted).decrypt()
console.log('user Data', userData)

【讨论】:

sails js 中没有类似的方法,它会抛出错误 在这种情况下,您只能一一阅读和解密所有电子邮件值,寻找匹配的值。静态加密列根本不适合搜索。

以上是关于解密不适用于在加密数据上使用解密值查询的记录的主要内容,如果未能解决你的问题,请参考以下文章

C# DES加密解密问题

用于解密 AES 值的 HSQL DB 函数

文件怎样可以解密呀

WebApi 如何 优雅的 对 输入输出 解密加密

hashlib模块的使用

nodeJS之crypto模块公钥加密及解密