我正在尝试在GET请求中将第1页的下载URL传递给第2页。
第1页通过数据库获取原始URL,然后加密URL并使其在网站上可用。当它通过URL时,第2页解密URL并下载文件。
网址目前如下:
它包含很多%%%
,因为它是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>';
答案 0 :(得分:0)
对未加密的数据使用某种类型的压缩,例如gzcompress()
,然后将其传递给加密方法,并将其输出传递给base64_encode
。 Base64编码仍会增加整体大小,但不会像url编码那样多。
答案 1 :(得分:-1)
虽然使用base64_encode()
并不一定是错误的想法,但没有人提到stock 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
中传递此数据。