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