为BaseJS编码PGPencryption的二进制文件在base64中

我有一个名为file.pgp的PGPencryption文件,它不能是ascii-armor,而是二进制文件。 它看起来像这样:

 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  

当我使用GNU base64编码器时,我得到这个string:

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

使用GNU base64工具,我可以成功地将其重新转换为原始的pgp文件并对其进行解密。

我想在NodeJS中实现一个类似的工具。 我可以成功地转换ASCII文本,但不是二进制内容。 我的临时代码如下所示:

 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')); }); 

用法: $ cat file.gpg | node base64.js $ cat file.gpg | node base64.js

输出看起来不同于GNU base64提供的。 此外,我不能将其转换回原始file.gpg文件 – GnuPG找不到任何解密。

发生这种情况是因为你传递一个string而不是一个缓冲区作为其注释中的hibernate点。

你可以这样做:

 let stdin = process.openStdin(); let data = []; stdin.on('data', chunk => { data.push(chunk); }); stdin.on('end', () => { console.log(Buffer.concat(data).toString('base64')); });