java - Java 实现中的 BouncyCaSTLe PGP 文本模式不会转换为 CR/LF

标签 java encryption bouncycastle pgp openpgp

有没有办法在 BouncyCaSTLe PGP 加密 Java 实现中指定文本模式?

我尝试了这个,但没有成功(使用 UNIX 行结尾加密并在 Windows 中解密):

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

最佳答案

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

Text data is stored with text endings (i.e., network- normal line endings). These should be converted to native line endings by the receiving software.

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 正在执行此(必需)转换的任何痕迹。我所能找到的就是他们将编码写入 header ( tub )。这是 BouncyCaSTLe 的错误。如果您报告它,他们可能会修复它,否则(或在那之前),您必须自己添加回车符。

关于java - Java 实现中的 BouncyCaSTLe PGP 文本模式不会转换为 CR/LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144840/

相关文章:

AnchorPane getwidth 问题中的 JavaFX Canvas

java - 在 gnupg-for-java 中提供 GnuPG key 的密码

java - 数据未在代码名称 BouncyCaSTLe 中对齐 block 大小(无填充)

java - java 比较器可以识别类型吗?

java - Hibernate:将 toString() 类方法映射到 String db 列

Java 注释在奇怪的地方

ios - 音频编解码器加密

java - 随机替换密码 Java

java - keytool 和 java keystore.aliases() 之间的 .pfx 文件或 .p12 文件的别名不匹配

java - 在 bouncy caSTLe 中生成 ECDSA 私钥返回公钥