Openpgp.js无法解密pgp消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openpgp.js无法解密pgp消息相关的知识,希望对你有一定的参考价值。

我正在使用openpgp.js 2.2.1版。

所以我设法加密了一条消息就好了

const options = 
    data: voteObject.option,       // input as Message object
    publicKeys: (pgp.key.readArmored(pubkey)).keys, // for encryption
;

pgp.encrypt(options).then(function(ciphertext) 
    console.log(ciphertext.data);
);

这会记录加密的消息。我现在遇到的问题是我无法解密它。在这一点上,我完全失去了,说实话,我已经尝试了一切,我不知道我在做什么了。我知道这不太合适,但我真的没有别的东西可以给。

任何建议都将是一个巨大的帮助!

答案

我认为你正在混合passphrase的密钥和password“简单地”加密字符串。 通常,在PGP中,发送方正在使用接收方的公钥加密消息。然后,消息的接收者可以用他的秘密密码短语解密他的私钥,并且利用得到的翻译私钥,他可以解密该消息。

我在下面添加了一个工作示例:

加密

const receiverPublicKey = ...;

let publicKeys = (await openpgp.key.readArmored(receiverPublicKey)).keys;
let options = 
    data: 'Hello, World!',
    publicKeys: publicKeys
;

return openpgp.encrypt(options)
    .then((encryptedMessageObject) => 
        return encryptedMessageObject.data; // -----BEGIN PGP MESSAGE----- ... wcBMA0rHUQJA4dCdAQg...
    );

解密

const receiverPrivateKey = ...;
const receiverPassphrase = 'secret';
const encryptedMessage = '-----BEGIN PGP MESSAGE----- ... wcBMA0rHUQJA4dCdAQg...';

let privKeyObj = (await openpgp.key.readArmored(receiverPrivateKey)).keys[0];
await privKeyObj.decrypt(receiverPassphrase);

let options = 
    message: await openpgp.message.readArmored(encryptedMessage),
    privateKey: privKeyObj
;

return openpgp.decrypt(options)
    .then((plaintextObject) => 
        return plaintextObject.data; // Hello, World!
    );

这是将PGP与一个发送者和一个接收者一起使用的常用过程(请注意,消息的signingchecking the signature缺失)。

现在还有解密password中的options。 为此,请参阅文档中的示例:

var options, encrypted;

options = 
    data: 'Hello, World!',      // input as String
    passwords: ['secret stuff'] // multiple passwords possible
;

openpgp.encrypt(options).then(function(ciphertext) 
    encrypted = ciphertext.data; // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
);
options = 
    message: openpgp.message.readArmored(encrypted), // parse armored message
    password: 'secret stuff'                         // decrypt with password
;

openpgp.decrypt(options).then(function(plaintext) 
    return plaintext.data; // 'Hello, World!'
);

在这种情况下,password用于加密和解密消息 - 根本没有公钥或私钥。

我希望有所帮助!

以上是关于Openpgp.js无法解密pgp消息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenPGP.js 在 Objective-C 中加密/解密 PGP 消息

Bouncycastle PGP 解密和验证

Bouncy Castle PGP 解密问题

OpenPGP协议的一个JavaScript实现:OpenPGP.js

Bouncy Castle Java PGP加解密

如何在openpgp JS中将参数消息作为文本传递