我正在尝试加密URL中的GET parametar。
$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);';
然后我得到这个网址
$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);
}
我最大的麻烦是URL参数中的base64_encode。某些字符会中断我的脚本,如+ = 我试图删除这些字符,但稍后在我的代码中需要检查
if(base64_decode($adresa, true))
如果我在此检查之前删除了+,=等字符,将评估为false
答案 0 :(得分:1)
base64不是网址保存。也不要删除=
标志。
使用此:
urlencode($xy)
而不是
rtrim($xy , '=');
您可能需要将pk编码为:
'&pk='.urlencode($sesija->pk).'&adresa='