2017-10-10 227 views
1

我有一個名爲file.pgp PGP加密文件,它不能以ascii-armor但二進制。它看起來像這樣:編碼PGP加密二進制base64爲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� 

當我使用GNU的base64編碼器,我得到這個字符串:

$ 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

輸出看起來是什麼GNU的base64報價不同。此外,我無法將其轉換回原始文件.gpg文件 - GnuPG找不到任何要解密的文件。

+0

我不知道最終的解決方案是什麼,但我認爲問題的一部分,將是,當你添加'chunk'到'data',它被轉換爲字符串而不是二進制。我很確定Node有一個緩衝區的概念,它將用於二進制內容。 – theGleep

回答

1

發生這種情況是因爲您傳遞字符串而不是緩衝區作爲其註釋中的休眠點。

你可以這樣說:

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

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

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

工作完美!謝謝! –