如何在 PHP RSA OAEP 中解码 用 Javascript 编码



所以,我有一些加密/解密问题...

由于node-forge,我在javascript中加密数据,并且由于openssl_private_decrypt,我尝试将其解密为PHP。

在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));

接下来,我用"xcem"参数发送url中的密钥,感谢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));
}

当我在 2 个 PHP 服务器之间发送数据时,没有问题......
但是我无法让它在 JS 和 PHP 之间工作......我需要一些帮助^^

所以...
经过一些测试和头痛,我发现了问题...在我的原始代码(不是这里的代码)中,我发送了密钥、初始化向量、签名和加密数据......
但是在我的 PHP 中,我试图解码签名......我没有以正确的顺序发送数据...
我的坏...

最新更新