【发布时间】:2010-11-14 09:29:01
【问题描述】:
我正在使用 Bouncy Castle 从文件系统中解密一个 XML 文件。我输出了解密后的文本,并在最后一个数据字节上得到了一个致命错误 SAXParseException。下面是我的解密方法和密码对象的设置。
我最初使用密码流,一切正常(注释掉的代码是我的流)。由于策略文件和最终用户没有 256 位无限版本,我需要使用充气城堡。
知道为什么最后一个字节没有通过吗?
来自构造函数:
keyParam = new KeyParameter(key);
engine = new AESEngine();
paddedBufferedBlockCipher =
new PaddedBufferedBlockCipher(new CBCBlockCipher(engine));
解密方法:
public void decrypt(InputStream in, OutputStream out) {
try
{
paddedBufferedBlockCipher.init(false,
new ParametersWithIV(keyParam, _defaultIv));
// cipher.init(Cipher.DECRYPT_MODE, secretKey, ivs);
// CipherInputStream cipherInputStream
// = new CipherInputStream(in, cipher);
byte[] buffer = new byte[4096];
byte[] outBuffer = new byte[4096];
for (int count = 0; (count = in.read(buffer)) != -1;) {
paddedBufferedBlockCipher.processBytes(buffer, 0,
count, outBuffer, 0);
out.write(outBuffer, 0, count);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
[Fatal Error] :40:23: Element type "Publi" must be followed by either attribute specifications, ">" or "/>".
org.xml.sax.SAXParseException: Element type "Publi" must be followed by either attribute specifications, ">" or "/>".
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:264)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:292)
【问题讨论】:
-
我不确定,我从来不用检查流选项。由于我在循环中执行此操作,因此我不需要 doFinal() 并且只是假设这可以正常工作。我将为“count”变量做一个系统输出,看看最后打印的数字是什么
-
错误:“处理缓冲区中的最后一个块。如果缓冲区当前已满并且需要添加填充,则调用 doFinal 将产生 2 * getBlockSize() 字节。”
标签: java bouncycastle encryption