gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:45 25 4
gpt4 key购买 nike

我正在开发一个 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”,以便将数据作为可能有效的二进制思维来处理,但随后我收到有关“用于解密的无效 session key ”的错误消息。因此,我尝试在文档中显示的主要解密之前使用“decryptSessionKey”函数,这让我得到了一个未定义的 key 和一个关于“没有找到对称加密的 session key 数据包”的错误。此外,我可能找错了树,因为将二进制文件与 Openpgp.js 一起使用似乎需要密码,我认为这与解锁我的私钥的密码不同,后者是我拥有的唯一密码。

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

最佳答案

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 行)

关于node.js - 使用 OpenPGP.js 解密非装甲 PGP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42266533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com