问题描述
我正在尝试使用 PGP 加密在 Java 中加密文本文件。库是 BouncyCastle。文本文件编码是基于 ASCII(Cp857) 的文件。
压缩文件并写入ByteArrayOutputStream后,如果字节长度为奇数则文件编码更改为UTF-16 LE,文件加密失败。
代码示例如下;
预先感谢您的帮助。
private void encryptTextFile(final OutputStream out,final String fileName,final PGPPublicKey encKey) throws IOException {
try {
final ByteArrayOutputStream bOut = new ByteArrayOutputStream();
final PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(CompressionAlgorithmTags.ZIP);
PGPUtil.writeFiletoLiteralData(comData.open(bOut),PGPLiteralData.BINARY,new File(fileName));
comData.close();
final byte[] bytes = bOut.toByteArray();
final PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(new JcePGPDataEncryptorBuilder(PGPEncryptedData.CAST5)
.setWithIntegrityPacket(true)
.setSecureRandom(new SecureRandom())
.setProvider("BC"));
encGen.addMethod(new JcePublicKeyKeyEncryptionMethodGenerator(encKey).setProvider("BC"));
final OutputStream cOut = encGen.open(out,bytes.length); // the returned output stream is not auto closeable
cOut.write(bytes);
cOut.close();
} catch (final PGPException e) {
LOGGER.error("There was a problem encrypting file",e);
if (e.getUnderlyingException() != null) {
e.getUnderlyingException().printstacktrace();
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)