如何使用加密流解密使用Transformer保存的xml文件?

时间:2014-04-30 12:08:31

标签: java xml encryption

我必须使用以下代码(我从前一个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 密码。

0 个答案:

没有答案