将 base64 传递给 PHP 中的 URL 以使用 OpenSSL 解码

Passing base64 to URL in PHP to decode with OpenSSL

我正在尝试通过 URL 传递参数。这个参数是base64.

https://site/file?base=+EOOJZIWLfQwoiVT6rfDbj3sr9vabuzX84bcT38u9hQSW3d/ErsE9E2OlXRvc88x

用 OpenSSL 在 PHP 文件中解密。当我发送它时,在 PHP 文件中它变成了

"EOOJZIWLfQwoiVT6rfDbj3sr9vabuzX84bcT38u9hQSW3d/ErsE9E2OlXRvc88x"

它在 base64 中转义了“+”。

所以 OpenSSL 无法解密它,因为它获取了错误的 base64。我试过 urlencode,但它把“/”转义为“%2f”,这里也一样。

这是我的代码:

$user = urlencode($_GET['base64']); // user
$key = ('12345678901234567890123456789012');
$iv = ('1234567890123456');
$field_data = htmlspecialchars($user);
//$e = urldecode($field_data);
$output = openssl_decrypt($field_data, 'AES-256-CBC', $key, 0, $iv);

通过使用 base64 编码解决,使用 base64-url 编码并在 php 中解码,通过 base64 解码使其 return 成为正常的 base64 .. 然后通过它到 openssl

        $user = $_GET['x']; // user
        
        
function base64url_encode($data) {
  return rtrim(strtr($data, '+/', '-_'), '=');
}
function base64_url_decode($input) {
 return strtr($input, '._-', '+/+');
}

 $last = base64_url_decode ( $user);

$key = ('12345678901234567890123456789012');
$iv = ('1234567890123456');


$output = openssl_decrypt($last, 'AES-256-CBC', $key, 0, $iv);

其中 url 传递的是

https://site/file?base=-EOOJZIWLfQwoiVT6rfDbj3sr9vabuzX84bcT38u9hQSW3d_ErsE9E2OlXRvc88x

i used client side c++ for encrypt aes and base64 url