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