RFC 4880, OpenPGP, 5.9. Literal Data Packet (Tag 11) определяет, что в текстовом режиме, данные должны быть закодированы с <CR><LF>
окончаниях строк:
Текстовые данные сохраняются с окончанием текста (т. Е. Network- ). Они должны быть преобразованы в исходную строку окончаниями принимающего программного обеспечения.
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 является делая это (необходимое) преобразование. Все, что я могу найти, это то, что они записывают кодировку в заголовок (t
, u
или b
). Это ошибка BouncyCastle. Они могут исправить это, если вы сообщите об этом, иначе (или до тех пор) вам придется добавить возврат каретки самостоятельно.
Установлен ли бит текстового режима ('gpg --list-packets')? Является ли поведение другим, если вы используете GnuPG в командной строке ('gpg --textmode --encrypt')? –
Да, я пробовал GnuPG. Я шифровал файл с помощью «** LF **» в текстовом режиме и расшифровывался в Windows. Файл имеет «** CRLF **», как ожидалось. – user3295565