【问题标题】:Decryption of different keys give the same result不同密钥的解密给出相同的结果
【发布时间】:2010-07-12 21:02:04
【问题描述】:

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

为(相同的)ID 请求 1 => int ID + salt + ?(假设唯一时间戳) = 加密文本 1 => 编码结果 1 为(相同的)ID 请求 2 => int ID + salt + ?(假设唯一时间戳) = 加密文本 2 => 编码结果 2

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

谢谢!

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

【问题讨论】:

    标签: jakarta-ee cryptography encryption


    【解决方案1】:

    许多加密模式使用初始化向量来随机化密文。如果使用这样的加密方式,那么对同一个明文进行两次加密会得到不同的密文,再次解密会得到相同的明文。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    相关资源
    最近更新 更多