Шифрование работает, но не расшифровывается в openpgp.js - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь расшифровать и зашифровать строки с помощью openpgp.js.

Шифрование работает нормально, но я не могу расшифровать.Я действительно не могу заставить его работать.

Вот рабочий пример шифрования: https://jsfiddle.net/d4vL8ueh/1/

var message = "secret message";
const encryptMessage  = async() => {
  if(window.crypto.getRandomValues){
    if(message != ""){
      const publicKeyString = document.getElementById("pubkey").innerHTML;

      var options = {
        message: openpgp.message.fromText(message),
        publicKeys: (await openpgp.key.readArmored(publicKeyString)).keys
      };


openpgp.encrypt(options).then(ciphertext => {
        alert(ciphertext.data);

    })



    }
  }
  else{
    window.alert("This browser does not support basic cryptography!");
  }
}

encryptMessage();

Но расшифровка не работает вообще: https://jsfiddle.net/pceswg0t/2/

const decryptMessage  = async() => {
  encrypted = document.getElementById("encrypted").innerHTML;
  if(window.crypto.getRandomValues){
    if(encrypted != ""){
      const privateKeyString =  document.getElementById("privkey").innerHTML;

      var options = {
        message: await openpgp.message.readArmored(message),
        privateKeys: (await openpgp.key.readArmored(privateKeyString)).keys,
        passphrase: "dfgjk23jkfdklfsdds232334fddf"
      };


openpgp.decrypt(options).then(plaintext => {
        decrypted = plaintext.data
        alert(decrypted);
    })



   }
  }
  else{
    window.alert("This browser does not support basic cryptography!");
  }
}
decryptMessage();

1 Ответ

0 голосов
/ 28 сентября 2018

Есть две проблемы:

Во-первых, несуществующая переменная message передается в readArmored при установке options.message.Вместо этого следует использовать переменную encrypted:

message: await openpgp.message.readArmored(encrypted),

Во-вторых, закрытый ключ зашифрован, поэтому его необходимо расшифровать, прежде чем его можно будет использовать.Это можно сделать, вызвав decrypt() на ключе перед его использованием:

var privateKeys = await openpgp.key.readArmored(privateKeyString);
privateKeys.keys[0].decrypt("dfgjk23jkfdklfsdds232334fddf")

var options = {
    message: await openpgp.message.readArmored(encrypted),
    privateKeys: privateKeys.keys
};

Вот обновленный JSFiddle: https://jsfiddle.net/gfkqbsoz/

...