Java如何检查值已经AES加密;

时间:2018-06-13 10:53:54

标签: java encryption aes

我创建了一个使用AES加密来加密表数据的工具。

加密方法

std::cout
  • 输入字符串: John Doee
  • 加密输出: 4aa2173cb653f89e109b23218ecaea7f

我想避免双重加密我的表数据。我想检查现有记录是否已加密。有没有办法检查这个?

2 个答案:

答案 0 :(得分:7)

加密后,添加一些前缀,例如AES:。解密时,检查是否存在前缀(并明显删除它)。

许多密码实现都做类似的事情,其中​​前几个字节识别算法。

与任何好的加密方案一样,只有密钥必须是秘密的。该算法可以公开而不会影响安全性。

唯一的边缘情况是真正的纯文本以前缀开头。如果您认为这值得考虑,那么您可以通过选择不太可能的前缀(可能利用明文知识)来降低风险。为了进一步保证,您可以查看输入的长度,因为真密文的长度保证是块大小的倍数。

答案 1 :(得分:2)

我同意迈克尔的观点,最好在密文前加上一些标记。但是如果你不能这样做,也有一种概率方法:

您无法100%确定地识别原始加密数据。但根据您的明文,您可以确定它是否未加密。例如,MSB可以识别ASCII文本。由于密文与随机噪声无法区分,因此加密数据不太可能具有相同的模式。

如果10个连续字节的MSB设置为零,那么它成为密文的几率就是2 -10 ,即小于0.1%。

但是毕竟你将密文编码为十六进制字符串,所以你需要在分析过程中将其反转。

如果您的明文恰好是压缩数据,那么可能性不大,因为熵几乎与加密甚至随机数据一样高。