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~%.:_\-';

おそらく、デコードは、permited_uri_chars 内にない文字を渡そうとしています。

于 2014-01-15T16:47:26.233 に答える