У меня есть класс, который принимает строку в таком формате:
000067000000000012620060324b38e2cab3353
, шифрует строку, а затем добавляет ее как переменную get в URL.
Класс, выполняющий шифрование, имеет функцию, которая выглядит следующим образом:
private function _code_encryption($enc_type,$a_string){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
if($enc_type == self::ENCRYPT_STRING){
//encrypt then return base64 encoded
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, self::AUTH_ENCRYPTION_KEY, $a_string, MCRYPT_MODE_CBC, $iv);
return base64_encode($encrypted);
}elseif($enc_type == self::DECRYPT_STRING){
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, self::AUTH_ENCRYPTION_KEY, base64_decode($a_string), MCRYPT_MODE_CBC, $iv);
return trim($decrypted);
}
}
Когда строка зашифрована, я кодирую значение urlencode и добавляю его к URL-адресу, как если бы URL-адрес выглядел как «https://secure.mysite.com/index.php?action=someaction&transfer_code=XXXXX, где XXXX – зашифрованная строка с URL-адресом.
Теперь, когда URL-адрес анализируется и обрабатывается, значение $_GET['transfer_code'] передается в вышеупомянутую функцию _code_encryption, но не возвращает правильно расшифрованное значение, а вместо этого возвращает искаженные символы, которые мой браузер не отображает. Есть ли требования к длине ключа, который я использую для шифрования/дешифрования? Я пробовал что-то вроде
$key = hash('sha256',self::AUTH_ENCRYPTION_KEY,true);
но и это не сработало...
Кроме того, я не декодирую переменную $_GET['transfer_code'], потому что в справочных страницах php указано, что переменные get уже закодированы в urlencoded...
Должен ли я кодировать буквенно-цифровую строку UTF-8 ПЕРЕД шифрованием / base64_encoding, или это вообще будет иметь значение?