2017-10-10 24 views
1

Ich habe eine PGP-verschlüsselte Datei namens file.pgp, die nicht in Ascii-Rüstung, sondern binär sein muss. Es sieht wie folgt aus:Verschlüsselte PGP-verschlüsselte Binärdatei in base64 für NodeJS

�P��3E��Q� �i`p��� 
����&�9 
�ֻ�<P�+�[����R0��$���q����VJ��hu���bE"2��M1r��j�K�v�@6�3E�Ҳ�A�W{Z 
��FEԭ�YV��6g�V���e�,I�Zpw�r��8׆ 
�mc��h��n���k�p�>JH\�G�6��M1|>�G�fl�J���6�� 
ج�� 
    �_��y8�..{���_⮵���F���~�vt 
          �8AB;z����m^��Xp���VӅCzD�ճn 

����{+d�3�"��N�1p� 

Wenn ich GNU Base64 Encoder bin mit, ich diese Zeichenfolge bekommen:

$ cat file.gpg | base64 hQEMA1DujfGcM0WiAQgAvcIMUfydsSDmaWBwnoWACrsapePpJpU5Co68276SK2XVBqY2YyNUgzAF oawkpMjfcQS+7+nJVkrb7Gh1h4L9YkUiMo+dTTFyzs5qskuECNZ25UA2rzNF+NKyq0HZV3sXWg3P AwZNZbNJIAc4xWlBNfsNoda7zhk8UJArj1sAiKPw5VIKjahGRdSt2FlWurs2Z5EXVriLG0aHZbAs SeCjWnB3Aalyoo8414aGbWOr5WjU7rpugBLw52uAcJgcPkpIXMJjCEf4gTbc1k0xfD4YjUejZmyH H0rYAAHw3DbjyQrYrLmHC9Vfm655HBU40xceLi5/e4n2Dxge+F/irrW9o9JGAfCf5OZ+gXZ0Ggv9 t620m704QUI7eryy0ddtXoGsWHCxu4gaVtOFQ3pEp9WzZghuC5j1/c57K2T4lzP+IvEfo07fMRFw tg==

Mit dem GNU base64-Tool, ich kann es erfolgreich zurückzuverwandeln an die Ursprung pgp-Datei und entschlüsseln sie.

Ich möchte ein ähnliches Tool in NodeJS implementieren. Ich kann ASCII-Text, nicht aber binären Inhalt erfolgreich konvertieren. Meine vorläufige Code sieht wie folgt aus:

var stdin = process.openStdin(); 
var data = ""; 

stdin.on('data', function(chunk) { 
    data += chunk; 
}); 

stdin.on('end', function() { 
    console.log(new Buffer(text, 'binary').toString('base64')); 
}); 

Verbrauch: $ cat file.gpg | node base64.js

Die Ausgabe sieht anders aus, was GNU base64 Angebote. Auch ich kann es nicht zurück in die ursprüngliche Datei Datei.gpg konvertieren - GnuPG kann nichts zum Entschlüsseln finden.

+0

Ich bin nicht sicher, was die endgültige Lösung sein wird, aber ich denke, ein Teil des Problems sein, dass, wenn Sie hinzufügen, 'chunk' zu' data', Es wird in eine Zeichenfolge anstelle einer Binärdatei konvertiert. Ich bin mir ziemlich sicher, dass Node das Konzept eines Puffers hat, der für binären Inhalt verwendet wird. – theGleep

Antwort

1

Dies passiert, weil Sie einen String und keinen Puffer als theGleep Punkt in seinem Kommentar übergeben.

Sie können es wie folgt tun:

let stdin = process.openStdin(); 
let data = []; 

stdin.on('data', chunk => { 
    data.push(chunk); 
}); 

stdin.on('end',() => { 
    console.log(Buffer.concat(data).toString('base64')); 
}); 
+0

hat perfekt funktioniert! Danke! –

Verwandte Themen