在Codeigniter中生成URL安全加密ID

时间:2019-01-02 02:41:14

标签: php encryption openssl codeigniter-3

对于url中的参数加密,我在扩展它之后使用了codeigniter加密类。扩展的目的是从加密中删除/ +-。一切正常。但是升级到PHP 7.1后,它显示mcrypt相关方法的弃用错误,并且文档还建议使用Encryption库中提供的openssl。所以我实现了

    $this->load->library('encryption');
    $this->encryption->initialize(
        array('driver' => 'openssl')
    );
    $this->encryption->encrypt($vendor->vid);

但是它会生成带有/的加密ID。

8da179e79fee45aa3c569d6c54653c99626d57b074fa599f8a109cb0c5f2edb6d7def3f1a6daf5b449d467976a8a32de0819b9af6d84b068f9ec903d41c2bcb9H / eQluY5B2EDN

如何在CI中使用openssl生成url安全的加密参数?

2 个答案:

答案 0 :(得分:0)

此问题的一种简单解决方案是,通过像您一样扩展核心加密库并使用类似的方法,将不需要的分隔符替换为另一个url安全分隔符:

function encode($string)
{
    $encrypted = parent::encrypt($string);
    if ( !empty($string) )
    {
        $encrypted = strtr($encrypted, array('/' => '~'));
    }
    return $encrypted;
}

function decode($string)
{
    $string = strtr($string, array('~' => '/'));
    return parent::decrypt($string);
}

答案 1 :(得分:0)

也许不回答您的问题,但可以通过混淆网址安全ID的方式解决

用于生成加密ID就像Youtube手表ID一样,我将Hashids Spark用于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