Итак, у меня есть некоторые проблемы с шифрованием/дешифрованием…
Я шифрую данные в javascript благодаря node-forge и пытаюсь расшифровать их в PHP благодаря openssl_private_decrypt.
На стороне PHP я использую заполнение «OPENSSL_PKCS1_OAEP_PADDING». Итак, на стороне javascript я попытался настроить Forge для шифрования данных с помощью RSA-OAEP.
И когда я пытаюсь расшифровать сообщение на стороне PHP, у меня возникают следующие ошибки:
error:04099079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error error:04065072:rsa routines:rsa_ossl_private_decrypt:padding check failed
Я попытался настроить шифрование с помощью дайджеста сообщения 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… Мне нужна помощь ^^



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Тааак…
После некоторых тестов и головной боли я нашел проблему… В моем исходном коде (не в том, что здесь) я отправил ключ, вектор инициализации, подпись и зашифрованные данные…
Но в моем PHP я попытался расшифровать подпись… Я отправил данные не в том порядке…
Виноват …