首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用后置*前面*钩子对加密字段执行后缀查询

使用后置*前面*钩子对加密字段执行后缀查询
EN

Stack Overflow用户
提问于 2021-09-01 13:35:54
回答 1查看 650关注 0票数 1

嘿,我有个问题,关于在我的数据库中存储加密数据的最佳方法。我使用Node.js,一个MySQL数据库,并将6.6.5作为ORM后缀。

,这是我所做的:

使用

  • beforeCreate和beforeUpdate钩子在将数据存储到数据库之前对数据进行加密。使用beforeFind钩子的
  • 在进行查询之前对查询条件进行加密。使用
  • 和afterCreate、afterUpdate和afterFind挂钩解密

在创建、更新或查询数据后使用它。

但是,查询本身给我带来了一些问题,我认为这与我加密数据的方式有关。我使用的Node.js密码模块与aes-256-cbc算法和随机 IV的每一个加密。对于随机IV,每种加密都会产生不同的字符串。这就是为什么即使我使用beforeFind钩子加密我的条件,查询也不会返回任何结果。

代码语言:javascript
复制
myModel.create({myField: "someData"}); 
// with the beforeCreate hook encrypting this the database will contain something like this
// myField: "1ac4e952cf6207e5fd79630e0e82c901"


myModel.findAll({ where: { myField: "someData" } });
// The beforeFind hook encrypts this condition but as mentioned the result is not the same 
// as the encrpyted value in the database
// It will look something like this:
// { where: { myField: "e203a4e22cf654w5fd7390300ef2c2f2" } }

// Because "1ac4e952cf6207e5fd79630e0e82c901" != "e203a4e22cf654w5fd7390300ef2c2f2"
// the query results in null

显然,我可以使用相同的IV加密我的数据,这会导致同一源的每一次加密,导致相同的加密字符串,但如果有其他方法使它像这样工作的话,我宁愿不这样做。

所以基本上我的两个问题是:

是否有一种方法可以使用随机IV进行加密?或者是否有更好的方法将加密的数据存储在数据库中?

提前谢谢大家!

EN

回答 1

Stack Overflow用户

发布于 2021-09-20 09:20:40

随机(salt)部分的目的正是为了防止您试图做的事情。

我不确定您的用例,但有时可以在没有salt (相同数据=>相同哈希)的情况下加密,有时(考虑用户密码)绝对可以加密,而不是not

从你发布的信息来看,我不知道你在哪里保存随机部分,否则你是如何解密数据的?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69014814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档