用途:主要用于URL的参数加密!
比如动态URL:xx.com/index.php?cid=1&id=2.html
实现成:xx.com/index.php?pwd=A1B2c3.html
把 cid=1&id=2 进行加密!
要求:
1、加密后的长度尽量短,openssl_decrypt 这个加密后的太长了!
2、加密后的密文要求不区分大小写, A1B2c3和 a1b2c3 都可以,也就是URL的大小写都可以访问。
用途:主要用于URL的参数加密!
比如动态URL:xx.com/index.php?cid=1&id=2.html
实现成:xx.com/index.php?pwd=A1B2c3.html
把 cid=1&id=2 进行加密!
要求:
1、加密后的长度尽量短,openssl_decrypt 这个加密后的太长了!
2、加密后的密文要求不区分大小写, A1B2c3和 a1b2c3 都可以,也就是URL的大小写都可以访问。
function xor_encrypt($data, $key) {
$key_len = strlen($key);
$data_len = strlen($data);
$output = '';
for ($i = 0; $i < $data_len; ++$i) {
$output .= $data[$i] ^ $key[$i % $key_len];
}
return bin2hex($output);
}
function xor_decrypt($data, $key) {
$key_len = strlen($key);
$data = hex2bin($data);
$data_len = strlen($data);
$output = '';
for ($i = 0; $i < $data_len; ++$i) {
$output .= $data[$i] ^ $key[$i % $key_len];
}
return $output;
}
function generate_encrypted_url($base_url, $params, $key) {
$param_str = http_build_query($params);
$encrypted = xor_encrypt($param_str, $key);
return $base_url . '?pwd=' . strtolower($encrypted);
}
function parse_encrypted_url($url, $key) {
$url_parts = parse_url($url);
parse_str($url_parts['query'], $query_params);
$encrypted = $query_params['pwd'];
$decrypted = xor_decrypt(strtolower($encrypted), $key);
parse_str($decrypted, $original_params);
return $original_params;
}
$key = 'your_key';
$params = array('cid' => 1, 'id' => 2);
$base_url = 'xx.com/index.php';
$encrypted_url = generate_encrypted_url($base_url, $params, $key);
echo "Encrypted URL: " . $encrypted_url . "\n";
$parsed_params = parse_encrypted_url($encrypted_url, $key);
echo "Decrypted params: ";
print_r($parsed_params);
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答1.4k 阅读✓ 已解决
796 阅读
647 阅读
不必要加密,可以考虑直接存数据库。如果数据量不大,直接存文件也行。
还可以考虑使用 PHP 实现的 hashids,注意,仅限数字。
可以自定义传入定制的字符串编码和长度,并且构造函数的第三个参数就可以传入编码后使用的字符串。
你这里希望不区分大小写,那就去掉大写。生成后随机把其中的字符转换为大写,使用时再统一转为小写再解析就可以了。