Openpgp.js не может расшифровать сообщение pgp - PullRequest
0 голосов
/ 20 февраля 2019

Я использую 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 голосов
/ 20 февраля 2019

Я думаю, что вы смешиваете 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 с одним отправителем и одним получателем (обратите внимание, что signing сообщения и checking the signature отсутствуют).

Теперь в расшифровке также есть passwordoptions.
Для этого см. Пример из документов:

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 используется для шифрования и дешифрования сообщения - вообще никакого открытого или закрытого ключа.

Надеюсь, это поможет!

...