2010-07-09 108 views
0

我在使用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框架是开源的,它使用javax.crypto.Cipher.doFinal方法进行加密和解密。

回答

1

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

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

+0

感谢您的反馈。创建密码时,它使用javax.crypto.Cipher类的getCipher(Cipher.ENCRYPT_MODE)方法。整个类的文档位于http://stripes.sourceforge.net/docs/current/javadoc/net/sourceforge/stripes/util/CryptoUtil.html,源代码可以从http://sourceforge.net/下载。项目/条纹/文件/条纹/条纹%201.5.1/stripes-1.5.1-src.zip /下载。 – 2010-07-13 17:59:23

相关问题