Я пытаюсь зашифровать параметр GET в URL.
$encrypt_method = "AES-256-CBC";
$secret_key = 'This is my secret key';
$secret_iv = 'This is my secret iv';
$key = hash('sha256', $secret_key);
$iv = substr(hash('sha256', $secret_iv), 0, 16);
$output = openssl_encrypt($adresa, $encrypt_method, $key, 0, $iv);
$xy = base64_encode($output);
$encoded_uniqid_file = rtrim($xy , '=');
$click = 'OtvoriProzor("'.$file_path.'&pk='.$sesija->pk.'&adresa='.$encoded_uniqid_file.
'&IDIstorijaElement='.$element->GetId().'", "Prevod", 700, 500);';
то я получаю этот url
$adresa = str_repeat('=', strlen($adresa) % 4);
if(base64_decode($adresa, true))
{
$encrypt_method = "AES-256-CBC";
$secret_key = 'This is my secret key';
$secret_iv = 'This is my secret iv';
$iv = substr(hash('sha256', $secret_iv), 0, 16);
$key = hash('sha256', $secret_key);
$adresa = openssl_decrypt(base64_decode($adresa), $encrypt_method, $key, 0, $iv);
}
Моя самая большая проблема - base64_encode в параметрах URL. Будут ли некоторые символы прервать мой скрипт, как + = Я попытался удалить эти символы, но позже в моем коде нужно проверить
if(base64_decode($adresa, true))
будет ли это оцениваться как false, если я удалю charachters, как +, = до этой проверки
base64 не сохраняет URL. также не удалять знак =
.
Использовать это:
urlencode($xy)
вместо
rtrim($xy, '=');
Вероятно, вам нужно закодировать pk:
'&pk='.urlencode($sesija->pk).'&adresa='