gpt4 book ai didi

java - 解密纯文本时Java Bouncy CaSTLe是否总是抛出异常

转载 作者:行者123 更新时间:2023-11-30 09:33:26 26 4
gpt4 key购买 nike

我的系统中有一个进程将接收随机纯文本或密文输入。由于性能不是问题,我打算尝试解密所有传入的输入,使用如下伪代码:

//get the input, either a plain text, or cipher text 'in disguise'
//ex of plain text: "some text".getBytes()
byte[] plainText = getInput();
try {

//try to decrypt whatever it is. Using Bouncy Castle as the AES crypto engine
plainText = AESDecryptor.decrypt(HARDCODED_AES_KEY, plainText);
} catch(Exception ex) {
...
}

//do some process with the plain text
process(plainText);

我使用 AES 作为加密方法。

上面的代码在很大程度上依赖于一个假设,即尝试使用充气城堡解密纯文本总是会抛出异常。但是这个假设是 100% 正确的吗?在尝试解密人类可读的普通文本时,它是否总是会抛出异常?

提前致谢!

最佳答案

简答

不,你不能保证有异常(exception)。

更长的答案

收到异常的概率取决于所使用的填充方案。当加密库使用包含填充的算法解密数据时,它希望找到正确填充的明文。如果填充格式不正确(例如,因为输入是明文,而不是密文),则可能会抛出异常。

如果您在解密时没有使用填充方案并且您的输入是密码 block 大小的倍数(在 AES 的情况下 - 16 字节),那么您的库将很乐意解密明文并给您垃圾。


例如,考虑 PKCS #7 padding .这会将非零字节数附加到明文末尾,其值等于填充字节数。添加足够的字节以使明文与密码的 block 大小对齐。例如:

12 34 56 78 9A BC DE F0 08 08 08 08 08 08 08 08

其中 08 值是八个字节的填充以与 AES block 大小对齐。那么,如果您解密一些明文,是否有可能产生有效的填充?可能不会。但它可以,所以这是设计系统的草率方法。


您需要在提议的协议(protocol)中添加另一层来指示数据是否加密。此时指定所使用的算法也可能很有用,因为这可能会在将来为您提供更大的灵 active 以支持其他算法。

关于java - 解密纯文本时Java Bouncy CaSTLe是否总是抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12198595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com