php - 在 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 安全加密参数?
解决方案
这个问题的一个简单解决方案是通过像你一样扩展核心加密库并使用类似这样的东西来用另一个 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);
}
推荐阅读
- r - 使用 as.numeric 将 char 列转换为数字时出错
- angular - 传递变量到嵌套组件
- php - $request->file('logoImg') 始终为空
- c# - .Value 打印为 Amazon.DynamoDBv2.DocumentModel.DynamoDBBool 而不是“真”或“假”
- html - 使用外部 CSS 工作表时,如何在按钮元素上获得悬停功能?
- c# - 如何在 DBContext 中拥有多个数据库?
- sql - 选择sql组中的最后一组记录
- sql - SQL - 使用连接将数据插入表中
- python - 因此,既然 Scapy 已重命名为 Kamene,我将如何导入和使用 base64_bytes?
- php - 数组中文件的内容并将其分解