首页 > 解决方案 > 在 Codeigniter 中生成 URL 安全的加密 id

问题描述

对于 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 安全加密参数?

标签: phpencryptionopensslcodeigniter-3

解决方案


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

推荐阅读