OpenPGP шифрование не работает между системами

Я относительно новичок в OpenPGP, но в настоящее время я пытаюсь зашифровать сообщение на устройстве пользователя с помощью OpenPGP.js и расшифровать это сообщение, используя OpenPGP PHP на моем сервере. Обе стороны могут шифровать и дешифровать свои собственные сообщения сейчас — проблема: как только я шифрую сообщение на стороне клиента, отправляю его на сервер и пытаюсь расшифровать его там, оно не работает, и наоборот.

Есть ли какие-то моменты, которые я могу проверить, в чем проблема?

Я пытался с помощью онлайн-сервис PGP для расшифровки и расшифровки и он без проблем декодирует сообщения на стороне сервера (OpenPGP PHP) и выдает ошибку «несоответствие контрольной суммы» на зашифрованных сообщениях на стороне клиента, так что я думаю, что это, вероятно, на стороне клиента. Я использую localstorage для хранения закрытых и открытых ключей на стороне клиента и файлов .asc на стороне сервера, если это имеет значение. Обмен открытым ключом работает правильно.

СТОРОНА СЕРВЕРА:
ENCRYPT:

$key = OpenPGP_Message::parse(OpenPGP::unarmor($public, "PGP PUBLIC KEY BLOCK"));
$data = new OpenPGP_LiteralDataPacket($string, array('format' => 'u', 'filename' => 'stuff.txt'));
$encrypted = OpenPGP_Crypt_Symmetric::encrypt($key, new OpenPGP_Message(array($data)));
$enc = OpenPGP::enarmor($encrypted->to_bytes(), "PGP MESSAGE");
$enc =  wordwrap($enc, 64, "\n", 1);
return $enc;

расшифровывать:

$keyEncrypted = OpenPGP_Message::parse(OpenPGP::unarmor($>private, 'PGP PRIVATE KEY BLOCK'));
$text = "";
foreach($keyEncrypted as $p) {
if(!($p instanceof OpenPGP_SecretKeyPacket)) continue;
$key = OpenPGP_Crypt_Symmetric::decryptSecretKey($pass, $p);
$msg = OpenPGP_Message::parse(OpenPGP::unarmor($encrypted, 'PGP MESSAGE'));
$decryptor = new OpenPGP_Crypt_RSA($key);
$decrypted = $decryptor->decrypt($msg);

$text = $decrypted->packets[0]->data;
}
return $text;

КЛИЕНТ:
ENCRYPT:

const options = {
data: string,
publicKeys: openpgp.key.readArmored(key).keys
}
openpgp.encrypt(options).then(ciphertext => {
encrypted = ciphertext.data;
callback(encrypted);
})

расшифровывать:

const privKeyObj = openpgp.key.readArmored(storage.get("crypt.private")).keys[0]
await privKeyObj.decrypt(storage.get("crypt.pass"))

const options = {
message: openpgp.message.readArmored(encrypted),     // parse armored message
publicKeys: openpgp.key.readArmored(storage.get("crypt.public")).keys,    // for verification (optional)
privateKeys: [privKeyObj]                            // for decryption
}

openpgp.decrypt(options).then(plaintext => {
console.log(plaintext.data);
callback(plaintext.data);
});

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]