我必须使用以下代码(我从前一个worker继承它)来创建xml文件:
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(CryptoHandler.encryptedStream(new FileOutputStream(fileName)));
transformer.transform(source, result);
其中encryptedStream返回CipherOutputStream。我以为我可以使用以下代码来解密此文件:
InputSource inputSource = new InputSource(CryptoHandler.decryptedStream(new FileInputStream(fileName)));
xmlReader.setContentHandler(contentHandler.newInstance());
xmlReader.parse(inputSource);
其中decryptedStream()使用以前使用的密钥,但是我得到了一个 SAXParseException:第一个charachter中的prolog 中不允许使用内容。
更新#1:
验证加密和解密的代码:
CipherOutputStream cos = null;
CipherInputStream cis = null;
String text = "Some text to encryptSome text to encrypt";
String filePath = "D:/test.txt";
String result = "";
cos = CryptoHandler.encryptedStream(new FileOutputStream(filePath));
cos.write(text.getBytes());
cos.flush();
cos.close();
cis = CryptoHandler.decryptedStream(new FileInputStream(filePath));
byte[] buffer = new byte[text.getBytes().length];
while (cis.read(buffer) != -1) {
result += new String(buffer);
}
Assert.assertEquals(text, result);
更新#2:
我发现上面的测试没问题,但是对于这个特定的字符串,如果我将它的长度改为不同的值,解密后最后会有一些丢失的字节(从4到大多数为基数)插入的数据)。虽然它有一些特殊的长度(2,4,8,16,24,40,80)。此加密方法使用 PBEWithMD5AndDES 密码。