URL中的Base64_encode

时间:2015-02-04 10:29:40

标签: php

我正在尝试加密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

1 个答案:

答案 0 :(得分:1)

base64不是网址保存。也不要删除=标志。

使用此:

urlencode($xy)

而不是

rtrim($xy , '=');

您可能需要将pk编码为:

'&pk='.urlencode($sesija->pk).'&adresa='