【问题标题】:Generating URL safe encrypted ids in Codeigniter在 Codeigniter 中生成 URL 安全的加密 id
【发布时间】:2019-05-01 23:54:49
【问题描述】:

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

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

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

8da179e79fee45aa3c569d6c54653c99626d57b074fa599f8a109cb0c5f2edb6d7def3f1a6daf5b449d467976a8a32de0819b9af6d84b068f9ec903d41c2bcb9H/eQluY5LUANEDwmCh+/trIvaJu2Bemj2p9J2MnEMII=

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

【问题讨论】:

    标签: php encryption openssl codeigniter-3


    【解决方案1】:

    此问题的一个简单解决方案是通过扩展核心加密库并使用类似这样的东西,用另一个 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);
    }
    

    【讨论】:

      【解决方案2】:

      可能无法回答您的问题,但可以通过混淆 url 安全 id 的方式解决

      为了像 Youtube watch id 一样生成加密 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
      

      【讨论】:

        猜你喜欢
        • 2017-08-11
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-07
        • 2015-10-05
        相关资源
        最近更新 更多