2016-10-20 32 views
0

有什么方法可以在BouncyCastle PGP加密Java实现中指定文本模式?BouncyCastle Java实现中的PGP文本模式不会转换为CR/LF

我试过,但没有运气(加密结尾UNIX线和解密在Windows中):

PGPLiteralDataGenerator pgpldg = new PGPLiteralDataGenerator(false); 
OutputStream ldout = pgpldg.open(compout, PGPLiteralData.TEXT, name, data.length, PGPLiteralData.NOW); 
+0

是否设置文本模式位('gpg --list-packets')?如果您在命令行上使用GnuPG('gpg --textmode --encrypt'),行为会有所不同吗? –

+0

是的,我试过GnuPG。我用文本模式用'** LF **'加密文件并在Windows中解密。如预期的那样,该文件具有'** CRLF **'。 – user3295565

回答

1

RFC 4880, OpenPGP, 5.9. Literal Data Packet (Tag 11)定义了在文本模式下,数据应该与<CR><LF>行结束编码:

文本数据与文本结尾一起存储(即网络- 法线结束)。这些应由接收软件转换为本地行 结尾。

GnuPG也可以这样做(--compress-algo 0禁用压缩,--store只是包装在字面数据包输入):

$ echo -e "foo\nbar" | gpg2 --textmode --compress-algo 0 --store | hexdump -c 
0000000 � 020 t \0 X \b � u f o o \r \n b a r 
0000010 \r \n               
0000012 

通过BouncyCastle's source code for PGPLiteralDataGenerator和其他所谓的类阅读,我无法找到一个跟踪BouncyCastle的是这样做(必需)转换。我能找到的只是他们将编码写入标头(tub)。这是一个BouncyCastle错误。他们可能会修复它,如果你报告它,否则(或直到那时),你必须自己添加回车。

相关问题