使用OpenPGP.js解密非装甲PGP文件

我正在构build一个Node应用程序,我已经构build了一个解密器函数,并使用Openpgp.js npm模块来完成这个工作。 我采用各种提交的PGP客户端文件,使用我们的公钥进行解密,使用我们的私钥进入,并将解密后的版本放在一个文件夹中供我访问,似乎都很好….只要因为这些文件是装甲的。 以下是一些代码示例行,显示事件的顺序:

const encryptedData = fs.readFileSync(encryptedFilePath, 'utf8') openpgp.decrypt({ message: openpgp.message.readArmored(encryptedData), publicKeys, privateKey }).then( (decrypted) => { fs.writeFile(decryptedFilePath, decrypted.data } ) 

当一个装甲的文件通过,一切都很好,我得到的解密文件在指定的文件夹。 这些文件在文本编辑器中打开时的格式如下:

 -----BEGIN PGP MESSAGE----- WBh2X7KwfEBDx0LEE1FzlnvxZs44o62FclpTazJpcl9J7DjwVfg9cHCID0TAN6Y6 B3b5bCQQFe1wTgpIkVtd0mFGQx7KGHj4FGte53qseVxC2bfq9PGKRIAUg6olr+82 

然而,我们有客户端encryption文件与装甲选项closures,所以他们在文本编辑器中打开时以hextypes的格式….

 7403 436d e6c0 f941 daac 945b 9a81 f066 6cd2 0032 5df0 9ca2 23a0 6eec a7bb f24c a941 99a8 1053 ae23 f88b 245c f709 c2b2 

…..或作为编码的文本文件,看起来像这样:

 DµÉ‰í+ 3K€Ð ˜PªeZ_|Ò®ó0  ãZqRµ3!ŒpuÉW NZrìÚk´ Aˆ›œiêø8 Ú ól:äΟ” 6‡) w ¬ÌŒWÝÚ¢ Q  œ œ? H¨¿ œ// ÃBA ´>(%° e  

(最后两个类似于我在代码示例中以上控制台login“encryptedData”时看到的内容。)

每当有任何非装甲的文件进来,进程失败,我最初有几个不同的错误取决于上面显示的types。 我拿走了fs.readFileSync上的'utf8'编码,并将“fromBinary”replace为“readArmored”来处理可能工作的二进制思考的数据,但后来我得到关于“解密的无效会话密钥”的错误。 所以我试着在文件中显示的主解密之前使用“decryptSessionKey”函数,这给我一个未定义的密钥和一个关于“找不到对称encryption的会话密钥包”的错误。 此外,我可能会吠叫错误的树,因为与Openpgp.js使用二进制文件似乎需要一个密码,我认为是不同于密码,解锁我的私钥,这是我唯一的密码。

我已经通过Openpgp.js文档search了所有文件,并且像疯了似的Googlesearch,但似乎无法find一个可靠的程序,如何修改我的代码,用于ASCII装甲文件解密非装甲的文件。 (然而,每一个进入的文件,当使用像PGP Desktop这样的桌面解密程序时,都可以快速无误地解密,所以我无法弄清楚我的差异在哪里以及为什么解决scheme不明显。)任何人都有任何经验有这个或可能的解决scheme?

openpgp.message.readArmored()的非装甲版本是openpgp.message.read()

所以这样的事情应该工作:

 const encryptedData = fs.readFileSync(encryptedFilePath, 'utf8') if encryptedData.startsWith('-----BEGIN PGP MESSAGE-----') encryptedMessage = openpgp.message.readArmored(encryptedData) else var TextEncoder = require('text-encoding').TextEncoder; var encryptedUint8 = new TextEncoder().encode(encryptedData); encryptedMessage = openpgp.message.read(encryptedUint8) openpgp.decrypt({ message: encryptedMessage, publicKeys, privateKey }).then( (decrypted) => { fs.writeFile(decryptedFilePath, decrypted.data } ) 

(如果你在你的代码中加载TextEncoder, var TextEncoder行在这里不是必需的)