PHP шифровать и дешифровать параметр URL в URL

Я пытаюсь передать URL загрузки со страницы 1 на страницу 2 в запросе GET.

Страница 1 получает необработанный URL через базу данных, затем шифрует URL и делает его доступным на сайте. Когда он передается через URL, страница 2 расшифровывает URL и загружает файл.

URL выглядит следующим образом:

https://example.com/download.php?dl=x6%1A%D8j%C4%D2%9Cx%8FA%8B%29%23Y%D9%D6%B4%DE8%18%2C%7B%F4% 86L% B0% 0A +% D3% B1% 01i% CFO% FF% BA% 9C% 22% А1% 08% 11% DB% 12% 282% DEI% B5% СА% 14K% FF% 21% CB% F3% 9D% 3C9f% 3C% 09% FA9% BB% BD% С9% B2% 275% F0% 06% А2% 80% 08h% A7f% 8C% 87% 28% A4% A5% 99% A9% A9% FA% D6f% C5% CA% 9B% 81.% 92% CD-% 89% FA3% 5C% 0C% F0% ED% F6% D9% 1E% B9% D0% B1% CFSA% F4% 95k% 1EZ% D1% 3A % D4H% 1D% 93% 40% 087% 92% 88% C3% A5p% C7WH% FA% CF% 9D% BAKd% A0% 9A% D7a6% 80% 5Ex% A5% 87% 07AK% D7% 5BQ% 10 % 98% 07% 7E% 82% 9A% BA9% 25% Д5% EA% 03% FD% C2% 9A% 22% 8FBW% 94K% D8T% 93% F5% E3% D7-

Он содержит много %%% потому что это urlencoded, есть ли способ изменить это, чтобы сделать URL-адрес менее длинным и сделать его менее запутанным, но сохранить его в безопасности, как сейчас?

Надеюсь, кто-нибудь может мне помочь.

Это скрипт шифрования и дешифрования:

define("ENCRYPTION_KEY", "ducksandpizza");

function encrypt($pure_string, $encryption_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);

return urlencode($encrypted_string);
}

function decrypt($encrypted_string, $encryption_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypted_string = urldecode($encrypted_string);
$decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);

return $decrypted_string;
}

//$encrypted = encrypt($_GET['dl'], ENCRYPTION_KEY);
$decrypted = decrypt($_GET['dl'], ENCRYPTION_KEY);

//echo 'encrypted: ' . $encrypted . '<br>';
echo 'decrypted: ' . $decrypted . '<br>';

-3

Решение

Используйте какой-либо тип сжатия незашифрованных данных, например gzcompress() а затем передать это в ваш метод шифрования, и вывод этого в base64_encode, Кодировка Base64 по-прежнему увеличивает общий размер, но не так сильно, как кодировка url.

0

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

При использовании base64_encode() не обязательно плохой Идея, никто не упомянул, что стандартная кодировка base64 не URL-безопасный поскольку он использует символы, значимые в синтаксисе URL.

Тем не менее, есть вариант, который безопасно это используется для кодирования токенов JWT:

function base64url_encode($bin) {
return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($bin));
}

function base64url_decode($str) {
return base64_decode(str_replace(['-', '_'], ['+', '/'], $str));
}

Вы должны также иметь в виду GET На запросы распространяются ограничения по длине, которые различаются в зависимости от реализации HTTP-сервера и языков. Вы, вероятно, захотите использовать что-то вроде gzcompress() как предлагается в комментариях, но более вероятно, что вы должны передавать эти данные в POST вместо.

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector