0

我想加密和解密CodeIgniter中的 get 参数。

我写了以下代码:

 <a href="<?php echo site_url('package?product='.$this->encrypt->encode('database').
  '&price='.$this->encrypt->encode('5000')); ?>">BUY NOW</a>

为了进行测试,这在我的 package.php 视图中,我在其中编写了以下内容:

 echo $this->encrypt->decode($_GET['product']);
 echo "<br/>";
 echo $this->encrypt->decode($_GET['price']);

但是当我点击链接时,有时它会显示两个值,有时只显示一个值,有时什么都没有......

4

2 回答 2

2

这解决了我的问题:

更新

只需在您的库文件夹中创建以下类并命名文件,Encryption然后您可以将其加载到我们的autoload.php或直接加载到您的控制器中。看一个例子:

$this->load->library('encryption'); //in controller
$autoload['libraries'] = array('database','encryption'); // In autoload.php

加密类:

class Encryption {

    var $skey = "MUHAMMAD";

    public function safe_b64encode($string) {

        $data = base64_encode($string);
        $data = str_replace(array('+', '/', '='), array('-', '_', ''), $data);
        return $data;
    }

    public function safe_b64decode($string) {
        $data = str_replace(array('-', '_'), array('+', '/'), $string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }

    public function encode($value) {

        if (!$value) {
            return false;
        }
        $text = $value;
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv);
        return trim($this->safe_b64encode($crypttext));
    }

    public function decode($value) {

        if (!$value) {
            return false;
        }
        $crypttext = $this->safe_b64decode($value);
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv);
        return trim($decrypttext);
    }

}

并在加载后使用库类,见下文:

$encrypt = $this->encryption->encode('Anything...');
$decrypt = $this->encryption->decode($encrypt);
于 2014-01-15T16:54:31.617 回答
1

尝试检查这个配置,里面application/config/config.php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

也许解码器试图传递一些不在 allowed_uri_chars 内的字符

于 2014-01-15T16:47:26.233 回答