使用CodeIgniter在URL中加密参数

时间:2014-12-01 06:08:57

标签: php codeigniter url encryption codeigniter-2

您好我正在使用CodeIgniter制作应用。

我想将数字ID加密为加密字符串。

http://example.com/post/6

http://example.com/post/v4th54u654khi3f23of23ir2h398eh2xi012

我尝试了内置的加密库

$这 - > encrypt->编码(6)

但是它会为每个页面加载生成不同的加密字符串,这不是我想要的,我希望永久链接就像Youtube视频ID一样。

我需要加密的字符串也可以解密。

6 个答案:

答案 0 :(得分:4)

您是否在配置文件中设置了$config['encryption_key'] = "Test@123";

OR

你必须在字符串

之后传递密钥

$this->encrypt->encode(6, 'Test@123')

$this->encrypt->decode(6, 'Test@123')

我为此扩展了核心库

创建文件名 MY_Encrypt.php 并将此文件放入application \ libraries

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class MY_Encrypt extends CI_Encrypt

{

function encode($string, $key = "", $url_safe = TRUE) {
    $ret = parent::encode($string, $key);

    if ($url_safe) {
        $ret = strtr($ret, array('+' => '.', '=' => '-', '/' => '~'));
    }

    return $ret;
}

function decode($string, $key = "") {
    $string = strtr($string, array('.' => '+', '-' => '=', '~' => '/'));

    return parent::decode($string, $key);
} }  ?>

现在你可以使用

$this->encrypt->encode(6)

$this->encrypt->decode(6)

这将有相同的结果。

答案 1 :(得分:0)

Codeigniter为此提供了一个库,您只需添加autoload.php文件即可 并且您可以使用以下行进行编码和解码。 也许你会为ex编码相同的值。 &#34; $一个&#34;多次编码值$ encodedA有所不同但是当你去解码时你将总是得到$ decodingA = 123。    $ a =&#39; 123&#39 ;; $ encodedA = $ this-&gt; encrypt-&gt; encode($ a); $ decodingA = $ this-&gt; encrypt-&gt; decode($ encodedA);

答案 2 :(得分:0)

最简单的方法是:

编码:$url_val=base64_encode($this->encryption->encrypt($var_to_encode));

解码:$var_to_encode=$this->encryption->decrypt(base64_decode($url_val));

测试功能

function test() {
    for($i=7000;$i<8000;$i++){
        $x=urlencode($this->encryption->encrypt($i));
        $y=$this->encryption->decrypt(urldecode($x));
        if ($y == $i) { //$y != $i cross test
            echo "$y&ltbr&gt;$x&ltbr&gt;&ltbr&gt;";
        }
    }
}

Cosidering config / config.php已经下降了:

$config['encryption_key'] ="key_here"

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

答案 3 :(得分:0)

用于生成加密ID,就像YouTube手表ID 我用 Hashids Spark for CodeIgniter

https://github.com/sekati/codeigniter-hashids

此助手的目的是实现Hashids从数字生成哈希(例如YouTube或Bitly)以混淆数据库ID。

安装就像在指令中一样,我在第20行修改hashids_helper.php

require_once FCPATH . 'sparks/sk-hashids/' . HASHIDS_VERSION . '/vendor/Hashids.php';

require_once FCPATH . 'vendor/Hashids.php';  //according to your Hashids path

答案 4 :(得分:0)

您可以将ID隐蔽为SHA1,而不必尝试编码和解码。 sha1将生成字母数字密钥,因此您也不会收到url支持错误。无需编码解码。这将生成安全的加密代码。

$random_key = sha1($leadDetails->lead_number);

答案 5 :(得分:-1)

对于这些,由于mycrpt而库无法在php 7上运行-> 新图书馆:https://www.codeigniter.com/user_guide/libraries/encryption.html