codeigniter:加密 URL 参数

codeigniter: Encryption URL parameter

我想像这样加密 URL 参数:

https://hello.com/questions/k0jUhPcRBJshpiXLpUSug_NhgPk89O7eS-jerHk6go360U9rl8LazZo6DR6M1N4IqG0PYIwPyKhQ

我在 helper 中创建编码和解码函数

Helper 

if ( ! function_exists('encode'))
    {
        function encode($str = NULL)
        {
            $ci =& get_instance();
            if( $ci->config->item('app_encrypt_mode') ==  TRUE){
                $ci->load->library('encrypt');
                $ci->encrypt->set_mode('MCRYPT_MODE_CFB');
                return $ci->encrypt->encode($str);
            } else {
                return $str;
            }

        }
    }

if ( ! function_exists('decode'))
    {
        function decode($str = NULL)
        {
            $ci =& get_instance();
            if( $ci->config->item('app_encrypt_mode') ==  TRUE){
                $ci->load->library('encrypt');
                $ci->encrypt->set_mode('MCRYPT_MODE_CFB');
                return $ci->encrypt->decode($str);
            } else {
                return $str;
            }
            
        }
    }

我在视图和控制器上使用了这个函数来隐藏 URL 参数。

VIEW

 <a class=" btn component-room d-block href="<?= site_url('Request/'.urlencode(encode($data['id']))); ?>">Click Me!</a>

<?php
$encode = urlencode(encode($data['id']);
var_dump('ENCODE:'.$encode);
var_dump('DECODE:'.decode(urldecode($encode));
?>

$data['id'] 的值为 33

var_dump 以及 33

的结果

var_dump('ENCODE:'.$encode); 必须 return 而不是 33 而是随机字符串

所以我错过了什么?

如果两个 var_dumps 都返回 33,则 app_encrypt_mode 配置选项不存在或未设置为 TRUE,并且默认为 return $str;

此外,CI 加密库已弃用,您应该改用加密库。即:

$ci->encryption->encrypt($str);$ci->encryption->decrypt($str);