不同键的解密给出相同的结果

时间:2010-07-09 16:05:20

标签: java-ee cryptography encryption

我在使用Java EE Framework时看到了今天的这种行为。每次我从服务器获取一个int ID时,该ID在base 64中被加密+编码,并且加密的字符串被发回。每个请求都提供不同的加密密钥。奇怪的是,如果我发出5个请求,我在第一个请求之后收到的加密文本仍然有效(解密它会给我正确的int ID)。加密工作原理如下:

   request 1 for (same) ID => 
     int ID + salt + ?(assume unique timestamp) = encrypted text 1 => encoded result 1
   request 2 for (same) ID => 
     int ID + salt + ?(assume unique timestamp) = encrypted text 2 => encoded result 2

我的问题是:没有缓存任何东西(在两个不同的站上测试它,相同数字的不同加密字符串将在两个站上解密为相同的数字),这种行为如何可能,从某种意义上说,解密算法是如何知道的如何从许多12个字符的加密字符串映射到相同的初始数据?此外,对于可以映射到相同数据的加密字符串数量是否存在限制?

谢谢!

P.S.The Framework是开源的,它使用javax.crypto.Cipher.doFinal方法进行加密和解密。

1 个答案:

答案 0 :(得分:1)

许多加密模式使用初始化向量来随机化密文。如果你使用这种加密模式,那么加密相同的明文两次会产生不同的密文,解密它们会再次产生相同的明文。

要回答您的所有问题,有必要详细了解您使用的加密模式。

相关问题