Безопасно ли использовать шифрование перед urlencode / urldecode. зашифрованный URL GET не возвращает одно и то же значение, иногда заменяя все + пробелами

Привет! Я использую функцию шифрования, чтобы зашифровать свой URI, прежде чем получить его urlencoded, и функцию, чтобы наконец расшифровать его после того, как я urldecoded на принимающей странице. Он работает нормально, но иногда urldecode заменяет все + пробелами, что приводит к сбою функции расшифровки.

Вот мои функции шифрования и дешифрования:

function encryptIt( $q ) {
$cryptKey  = 'aJB0rGtIn5UB1xG40efydp';
$qEncoded      = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}

function decryptIt( $q ) {
$cryptKey  = 'aJB0rGtIn5UB1xG40efydp';
$qDecoded      = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
return( $qDecoded );
}

И вот как я готовлю свой GET URL:

                $encrypted_id = encryptIt( $id );

$uri=urlencode($encrypted_id);
$uri="http://example.com/xyz.php?id=".$uri;

И тогда мой сценарий получения:

               $id=urldecode($_GET['id']);
$id=decryptIt($id);

Безопасно ли использовать шифрование / дешифрование и URlencode / urldecode одновременно? или я делаю это где-то неправильно.

1

Решение

Не звони urldecode() в приемнике. PHP автоматически декодирует все параметры URL, прежде чем поместить их в $_GET, Таким образом, вы расшифровываете дважды; автоматическое декодирование переводит %2B в +, а затем ваш звонок urldecode() переводит + в космос.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]