java - 为什么每次使用 AWS KMS CMK 加密时都会得到不同的字节?
问题描述
我正在尝试使用 aws kms cmk 将我的敏感数据(例如用户电子邮件地址)加密到数据库中。我在 java 中使用 aws SDK。
我已加密该字段并存储在数据库中。
我也可以解密数据。
但主要问题是当我必须查询数据时......当我取回 aws sdkbytes 并将其转换为 base 68 并存储它时。
为什么aws在加密后总是为相同的数据返回不同的SDK字节?我不能简单地通过数据搜索。我必须带上所有列表并解密数据,然后匹配数据。这需要很多时间。
请建议我使用 aws cmk 密钥加密数据的好方法。
感谢 Ankit
解决方案
加密如果正确完成,永远不会是确定性的。确定性并始终加密abc@abc.com
将fa3GeFi2nb52JH0
是一个弱点,因为它会泄漏信息(如果您发现两个相同的密文,那么您知道它们拥有相同的纯文本。您不知道确切的值,但您知道它是相同的)。从技术上讲,您使用一个名为 IV(初始化向量)的随机值传递给加密过程,但我们不要深入挖掘。
那么,如何处理你的情况。您可以:
- 接受现在的样子,
- 假设你希望你的加密是确定性的,即使以更弱和泄露数据为代价。
如何使加密具有确定性?使用恒定的 IV 值。我不知道这是否可以在 AWS 中完成以及如何完成,但这将是最简单的方法。
推荐阅读
- python - 合并相似的字符串 Python
- web-services - ServiceStack:使用 HTTP 请求中的标头对每个请求进行身份验证
- asp.net - 如何在角度 4 中显示错误请求响应的主体?
- ruby-on-rails - serviceworker-rails gem 未与solidus eCommerce gem 集成
- sql - 为每个唯一列值选择最后一项
- ios - 动画时重置节点旋转值
- swift - 如何在 swift 中从命令行启动标准编辑器
- c# - 使用 Automapper 优化相关子查询
- jquery - 将 XPath 选择器转换为 jQuery
- sparql - 多个谓词组中的 sparql 和查询