2016-10-20 19 views
0

Есть ли способ указать текстовый режим в BouncyCastle PGP-шифровании Java-реализации?BouncyCastle PGP textmode в реализации Java не конвертируется в 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> окончаниях строк:

Текстовые данные сохраняются с окончанием текста (т. Е. 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. Они могут исправить это, если вы сообщите об этом, иначе (или до тех пор) вам придется добавить возврат каретки самостоятельно.