What are the potential pitfalls of using base64_encode and base64_decode for passing variables in the URL in PHP?

Using base64_encode and base64_decode for passing variables in the URL can potentially lead to security vulnerabilities as the encoded data can be easily decoded by anyone. To solve this issue, it is recommended to use encryption techniques like AES encryption before encoding the data with base64_encode.

// Encrypt the data before encoding with base64_encode
function encrypt_data($data, $key) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
    return base64_encode($iv . $encrypted);
}

// Decrypt the data after decoding with base64_decode
function decrypt_data($data, $key) {
    $data = base64_decode($data);
    $iv = substr($data, 0, openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = substr($data, openssl_cipher_iv_length('aes-256-cbc'));
    return openssl_decrypt($encrypted, 'aes-256-cbc', $key, 0, $iv);
}

// Example usage
$key = 'secret_key';
$data = 'sensitive_data';
$encrypted_data = encrypt_data($data, $key);
echo $encrypted_data . "\n";

$decrypted_data = decrypt_data($encrypted_data, $key);
echo $decrypted_data;