Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 使用OpenPGP.js解密非装甲PGP文件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个Node应用程序,我已经在其中构建了一个解密器函数,并使用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

但是,我们有客户端使用装甲选项关闭加密文件,因此在文本编辑器中打开时它们会以十六进制格式存在….

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�

(最后两个类似于我在代码示例中控制日志“encryptedData”时看到的内容.)

每当有任何非装甲文件进入时,进程都会失败,我最初会遇到几个不同的错误,具体取决于上面显示的类型.我在fs.readFileSync上删除了’utf8’编码,并将“fromBinary”替换为“readArmored”以将数据作为可能有效的二进制思想处理,但随后我收到有关“无效的解密会话密钥”的错误.所以我尝试在主解密之前使用“decryptSessionKey”函数,因为它在文档中显示,这给我一个未定义的密钥和一个关于“没有找到对称加密的会话密钥包”的错误.此外,我可能正在咆哮错误的树,因为使用Openpgp.js的二进制文件似乎需要一个密码,我认为这与解锁我的私钥的密码不同,这是我拥有的唯一密码.

我已经搜索了所有Openpgp.js文档和谷歌搜索疯狂,但似乎无法找到一个可靠的程序如何修改我的代码,适用于ASCII装甲文件解密非装甲文件. (但是,当使用像PGP桌面这样的桌面解密程序时,每个进来的文件都会快速解密并且没有错误,所以我无法弄清楚我的差异在哪里以及为什么解决方案不明显.)任何人都有任何经验有这个或可能的解决方案?

解决方法

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,decrypted.data } )

(如果在代码中先前加载TextEncoder,则此处不需要var TextEncoder行)

大佬总结

以上是大佬教程为你收集整理的node.js – 使用OpenPGP.js解密非装甲PGP文件全部内容,希望文章能够帮你解决node.js – 使用OpenPGP.js解密非装甲PGP文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。