使用CodeIgniter在URL中加密参数

问题描述 投票:1回答:6

嗨,我正在使用CodeIgniter制作应用程序。

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

http://example.com/post/6

http://example.com/post/v4th54u654khi3f23of23ir2h398eh2xi012

我尝试了内置的加密库

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

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

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

php codeigniter url encryption codeigniter-2
6个回答
4
投票

你在配置文件中设置了$config['encryption_key'] = "Test@123";吗?

要么

你必须在字符串后传递密钥

$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)

这将有相同的结果。


0
投票

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


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;";
        }
    }
}

考虑到config / config.php有以下集:

$config['encryption_key'] ="key_here"

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

0
投票

对于生成加密ID就像Youtube watch 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

0
投票

您可以将id转换为SHA1,而不是尝试使用编码和解码。 sha1将生成字母数字键,因此您也不会获得url支持错误。无需编码解码。这将生成安全的加密代码。

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

-1
投票

对于那些如何在这里和库不工作的PHP 7因为mycrpt - >新图书馆:https://www.codeigniter.com/user_guide/libraries/encryption.html

© www.soinside.com 2019 - 2024. All rights reserved.