Итак, у меня есть некоторые проблемы с шифрованием / дешифрованием ...
Я шифрую данные в javascript благодаря node-forge и пытаюсь расшифровать их в PHP благодаря openssl_private_decrypt.
На стороне PHP я использую заполнение «OPENSSL_PKCS1_OAEP_PADDING». Итак, на стороне JavaScript я попытался настроить forge для шифрования данных с помощью RSA-OAEP.
И когда я пытаюсь расшифровать сообщение на стороне PHP, у меня появляются следующие ошибки:
ошибка: 04099079: подпрограммы rsa: RSA_padding_check_PKCS1_OAEP_mgf1: ошибка декодирования oaep
ошибка: 04065072: подпрограммы rsa: rsa_ossl_private_decrypt: проверка заполнения не выполнена
Я пытался настроить шифрование с помощью дайджеста сообщения sha1 и параметра sha1 для mgf1. Я также пытался без какой-либо опции (если я помню, кузница использует SHA256 по умолчанию). Но делать нечего, у меня всегда одна и та же ошибка…
Javascript
const pubkey = `-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
`;
const privkey = `-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
`;
let publicKey = forge.pki.publicKeyFromPem(pubkey);
let key = forge.random.getBytesSync(32);
let encKey = publicKey.encrypt(key, 'RSA-OAEP', {
md: forge.md.sha1.create(),
mgf1: {
md: forge.md.sha1.create()
}
});
let b64Key = encodeURIComponent(btoa(enckey));
Затем я отправляю ключ в URL с параметром "xcem", благодаря HttpClient. И я получаю это на PHP.
PHP
$privKey = "";
$b64Key = urldecode($_GET['xcem']);
$encKey = base64_decode($b64Key);
$key = null;
if (!openssl_private_decrypt($encKey, $key, file_get_contents('/keys/openssl_private.key'), OPENSSL_PKCS1_OAEP_PADDING))
{
$errorssl = [];
while ($error = openssl_error_string()) {
$errorssl[] = $error;
}
throw new Exception("Erreur lors du décryptage du message ! " . json_encode($errorssl));
}
Когда я отправляю данные между двумя PHP-серверами, проблем не возникает ...
Но я не могу заставить его работать между JS и PHP ... Мне нужна помощь ^^