2016-10-20 7 views
0

Existe-t-il un moyen de spécifier le mode de texte dans l'implémentation Java du chiffrement PGP de BouncyCastle?Le mode de texte PGP de BouncyCastle dans l'implémentation Java ne se convertit pas en CR/LF

J'ai essayé, mais pas de chance (crypté avec la ligne UNIX fin et décryptés sous Windows):

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

Le bit de mode texte est-il défini ('gpg --list-pack'')? Le comportement est-il différent si vous utilisez GnuPG sur la ligne de commande ('gpg --textmode --encrypt')? –

+0

Oui, j'ai essayé GnuPG. J'ai crypté un fichier avec '** LF **' avec le mode texte et décrypté dans Windows. Le fichier a '** CRLF **' comme prévu. – user3295565

Répondre

1

RFC 4880, OpenPGP, 5.9. Literal Data Packet (Tag 11) définit qu'en mode texte, doivent être données codées avec <CR><LF> fins de ligne:

Les données textuelles sont stockées avec des fins de texte (c.-à-d., Réseau- terminaisons de ligne normales). Ceux-ci doivent être convertis en terminaisons par le logiciel de réception.

GnuPG fait donc (--compress-algo 0 désactive la compression, --store juste encapsule l'entrée dans un paquet de données littérale):

$ 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 

La lecture de BouncyCastle's source code for PGPLiteralDataGenerator et d'autres classes dites, je ne peux pas trouver une seule trace BouncyCastle est faire cette conversion (obligatoire). Tout ce que je peux trouver, c'est qu'ils écrivent le codage dans l'en-tête (t, u ou b). C'est un bug BouncyCastle. Ils pourraient le réparer si vous le signalez, sinon (ou jusque-là), vous devez ajouter le retour de chariot sur votre propre.