首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Openpgp.js无法解密pgp消息

Openpgp.js无法解密pgp消息
EN

Stack Overflow用户
提问于 2019-02-20 11:27:36
回答 1查看 3.2K关注 0票数 0

我使用的是openpgp.js版本2.2.1。

所以我很好地加密了一条信息

代码语言:javascript
运行
复制
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);
});

这将记录加密的消息。我现在遇到的问题是我无法破解它。我在这一点上完全不知所措,老实说,我已经尽了全力,我不知道自己在做什么。我知道这没什么可做的,但我真的没有什么可做的。

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

EN

回答 1

Stack Overflow用户

发布于 2019-02-20 20:05:01

我认为您混淆了密钥的passphrase和用于“简单”加密字符串的password

通常,在PGP中,发送方使用接收方的公钥对消息进行加密。然后,消息的接收方可以用他的秘密密码来解密他的私钥,然后他就可以用所得到的解密私钥来解密该消息。

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

加密

代码语言:javascript
运行
复制
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...
    });

解密

代码语言:javascript
运行
复制
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丢失了)。

现在解密的options中也有options

为此,请参阅文档中的示例:

代码语言:javascript
运行
复制
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用于加密和解密消息--根本没有公钥或私钥。

我希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54785242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档