Java 为什么每次使用AWS KMS CMK加密时都会得到不同的字节?
我正在尝试使用aws kms cmk将我的敏感数据(如用户电子邮件地址)加密到数据库。我正在java中使用aws SDK 我已对字段进行加密并存储在数据库中 我还可以解密数据 但主要的问题是当我不得不查询数据时。。。 当我取回aws sdkbytes并将其转换为base 68并存储时 为什么aws在加密后总是为相同的数据返回不同的SDK字节? 我不能简单地搜索数据。 我必须带上所有的列表,解密数据,然后匹配数据。 这需要很多时间 请建议我使用aws cmk密钥加密数据的好方法 谢谢Java 为什么每次使用AWS KMS CMK加密时都会得到不同的字节?,java,mysql,amazon-web-services,encryption,sdk,Java,Mysql,Amazon Web Services,Encryption,Sdk,我正在尝试使用aws kms cmk将我的敏感数据(如用户电子邮件地址)加密到数据库。我正在java中使用aws SDK 我已对字段进行加密并存储在数据库中 我还可以解密数据 但主要的问题是当我不得不查询数据时。。。 当我取回aws sdkbytes并将其转换为base 68并存储时 为什么aws在加密后总是为相同的数据返回不同的SDK字节? 我不能简单地搜索数据。 我必须带上所有的列表,解密数据,然后匹配数据。 这需要很多时间 请建议我使用aws cmk密钥加密数据的好方法 谢谢 Ankit加
Ankit加密如果做得好,永远不会确定。确定性和加密始终
abc@abc.com
到fa3GeFi2nb52JH0
将是一个弱点,因为它会泄漏信息(如果您发现两个相等的密文,则您知道它们包含相同的纯文本。您不知道确切的值,但您知道它是相同的)。从技术上讲,您可以将一个名为IV(初始化向量)的随机值传递给加密过程,但我们不必深入研究
那么,如何处理你的案件。您可以:
- 接受它现在的样子
- 假设您希望您的加密是确定性的,即使是以较弱和泄漏数据为代价
如何使加密具有确定性?使用恒定IV值。我不知道这是否可以在AWS中实现以及如何实现,但这将是最简单的方法。通过以这种方式使用KMS,您正在执行客户端加密,这将让您在检索数据后负责解密 目前还没有在SQL操作中明确使用KMS密钥的实现,唯一支持的是在文件存储的其余部分进行加密 你的选择是:
- 切换到
- 从加密切换到哈希以匹配此字段(不理想)
- 缩小范围以解密后执行后处理