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);
});
Это регистрирует зашифрованное сообщение. Проблема у меня сейчас в том, что я не могу ее расшифровать. На данный момент я в полной растерянности и, честно говоря, я все перепробовал до такой степени, что больше не знаю, что делаю. Я знаю, что с этим не так много работы, но мне больше нечего дать.
Любые предложения будут огромной помощью!
1 ответ
Я думаю, что вы путаете 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
пропал, отсутствует).
Теперь есть также 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
используется для шифрования и дешифрования сообщения - без открытого или закрытого ключа.
Надеюсь, это поможет!