Openpgp.js无法解密pgp消息

时间:2019-02-20 11:27:36

标签: javascript angular encryption openpgp openpgp.js

我正在使用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);
});

这将记录加密的消息。我现在遇到的问题是我无法解密它。此时我完全不知所措,说实话,我已经尝试了所有事情,以至于我不知道自己在做什么。我知道这没什么用,但是我真的没有其他可提供的东西。

任何建议都将带来巨大帮助!

1 个答案:

答案 0 :(得分:0)

我认为您正在混用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来加密和解密消息-完全没有公共或私有密钥。

希望对您有帮助!