【问题标题】:BouncyCastle PGP textmode in Java implementation does not convert to CR/LFJava 实现中的 BouncyCastle PGP 文本模式不会转换为 CR/LF
【发布时间】:2017-03-01 21:18:12
【问题描述】:

有没有办法在BouncyCastle PGP加密Java实现中指定textmode?​​p>

我试过了,但没有运气(使用 UNIX 行结尾加密并在 Windows 中解密):

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

【问题讨论】:

  • 是否设置了文本模式位 (gpg --list-packets)?如果您在命令行上使用 GnuPG (gpg --textmode --encrypt),行为会有所不同吗?
  • 是的,我试过 GnuPG 。我确实使用文本模式使用“LF”加密了一个文件并在 Windows 中解密。该文件具有预期的“CRLF”。

标签: java encryption bouncycastle pgp openpgp


【解决方案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 错误。如果您报告它,他们可能会修复它,否则(或在此之前),您必须自己添加回车。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多