gpt4 book ai didi

java - 加密截断

转载 作者:行者123 更新时间:2023-11-30 08:54:23 24 4
gpt4 key购买 nike

我有一个加密功能,在各种环境中一直运行良好,但最近,它一直在吐出奇怪的结果。

代码如下:

public static byte[] Encrypt(String pstrInput) throws Exception {
ByteArrayOutputStream ms;
CipherOutputStream encStream;
OutputStreamWriter sw;
byte[] buffer;

ms = new ByteArrayOutputStream();
encStream = new CipherOutputStream(ms, getEncCipher());
sw = new OutputStreamWriter(encStream);

try {
sw.write(pstrInput);
sw.write("\r\n");
sw.close();
encStream.close();
ms.close();
buffer = ms.toByteArray();
} catch(IOException e) {
throw new Exception("Unexpected IO errors in Security Encrypt", e);
}
return buffer;
}

问题是,在某些环境中,buffer 会被截断为 8 个字节,我不知道为什么。

我可以通过注释掉 encStream.close() 行在我的机器上重现这个问题,但我也不知道为什么。

据我所知,有问题的机器(开发和 QA)运行相同的 JVM(OpenJDK 1.7 64 位)。唯一的区别是开发机器在 Eclipse 的 Jetty 中运行代码,而 QA 正在运行 Tomcat,但这应该没有任何区别......

有什么建议吗?

最佳答案

问题不是截断输出。问题是垃圾被添加到代码“工作”的机器上的输出中。截断的版本实际上是正确的。

关闭流编写器会关闭底层流。此外,关闭已关闭的流应该不会有任何影响。

但是,某些版本的 CipherStream 似乎存在一个错误,再次关闭它实际上会导致它刷新并加密一个新 block 。

这就是为什么注释掉 encStream.close() 会“重现”问题(通过实际修复它)。

关于java - 加密截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29416429/

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