如何保护变量通过URL发送?

时间:2014-11-11 02:42:33

标签: php codeigniter

我使用PHP和CI框架,我想通过URL发送变量,但我希望它有点加密。

例如,我想发送名为id的变量:

  

www.trythis.com/site?id=123

我希望它是

  

www.trythis.com/site?id=VkxSiOW31S

加密文本只是一个例子。 我怎样才能做到这一点?或者是否有CI功能可以做到这一点?

注意:我已经尝试了base64_encode,但由于其特殊字符(如==),它无法以某种方式在CI中使用。

2 个答案:

答案 0 :(得分:1)

CodeIgniter有Encryption Class。您可以使用该类进行加密和解密。要配置,请执行以下步骤

  1. 设置密钥

    $config['encryption_key'] = "YOUR KEY";

  2. 初始化课程

    $this->load->library('encrypt');

  3. 编码使用

    $id = '123';
    $encrypted_id = $this->encrypt->encode($id);
    //$url = 'www.trythis.com/site?id=' . $encrypted_id;
    

    并解码

    //$encrypted_id = $_GET['id'];
    $decrypted_id = $this->encrypt->decode($encrypted_id);
    

答案 1 :(得分:0)

我为了同样的目的创造了这个课程:

class Cypher
{

    public $encrypted;
    public $decrypted;

    public function __construct($_value) {

        $this->encrypted = $this->encrypting($_value);
        $this->decrypted = $this->decrypting($_value);

    }

    private function encrypting($_value) {

        $key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $utf8 = utf8_encode($_value);
        $cipher = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $utf8, MCRYPT_MODE_CBC, $iv);
        $cipher = $iv.$cipher;
        $base64 = base64_encode($_value);

        return $base64;

    }

    private function decrypting($_value) {

        return base64_decode($_value);

    }

}

让我们试试你的例子:

$cypher = new Cypher('123');

header("location: www.trythis.com/site?id=".$cypher -> encrypted);

在www.trythis.com/site页面:

$id = isset($_GET['id']) ? new Cypher($_GET['id']) : "";

echo $id -> decrypted;