嗨,我正在使用CodeIgniter制作应用程序。
我想将数字ID加密为加密字符串。
从
至
http://example.com/post/v4th54u654khi3f23of23ir2h398eh2xi012
我尝试了内置的加密库
$这 - > encrypt->编码(6)
但它为每个页面加载生成不同的加密字符串,这不是我想要的,我希望永久链接就像Youtube视频ID一样。
我需要加密的字符串也可以解密。
你在配置文件中设置了$config['encryption_key'] = "Test@123";
吗?
要么
你必须在字符串后传递密钥
$this->encrypt->encode(6, 'Test@123')
$this->encrypt->decode(6, 'Test@123')
我为此扩展了核心库
创建一个文件名MY_Encrypt.php并将此文件放在application \ libraries中
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Encrypt extends CI_Encrypt
{
function encode($string, $key = "", $url_safe = TRUE) {
$ret = parent::encode($string, $key);
if ($url_safe) {
$ret = strtr($ret, array('+' => '.', '=' => '-', '/' => '~'));
}
return $ret;
}
function decode($string, $key = "") {
$string = strtr($string, array('.' => '+', '-' => '=', '~' => '/'));
return parent::decode($string, $key);
} } ?>
现在你可以使用了
$this->encrypt->encode(6)
$this->encrypt->decode(6)
这将有相同的结果。
Codeigniter为此提供了一个库,您只需添加autoload.php文件,就可以使用以下行进行编码和解码。也许你会为ex编码相同的值。 “$ a”多次编码值$ encodedA有所不同,但是当你去解码时,你总会得到$ decodingA = 123. $ a ='123'; $ encodedA = $ this-> encrypt-> encode($ a); $ decodingA = $ this-> encrypt-> decode($ encodedA);
最简单的方法是:
编码:$url_val=base64_encode($this->encryption->encrypt($var_to_encode));
解码:$var_to_encode=$this->encryption->decrypt(base64_decode($url_val));
测试功能
function test() {
for($i=7000;$i<8000;$i++){
$x=urlencode($this->encryption->encrypt($i));
$y=$this->encryption->decrypt(urldecode($x));
if ($y == $i) { //$y != $i cross test
echo "$y<br>$x<br><br>";
}
}
}
考虑到config / config.php有以下集:
$config['encryption_key'] ="key_here"
和
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+=';
对于生成加密ID就像Youtube watch id我使用Hashids Spark for 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
您可以将id转换为SHA1,而不是尝试使用编码和解码。 sha1将生成字母数字键,因此您也不会获得url支持错误。无需编码解码。这将生成安全的加密代码。
$random_key = sha1($leadDetails->lead_number);
对于那些如何在这里和库不工作的PHP 7因为mycrpt - >新图书馆:https://www.codeigniter.com/user_guide/libraries/encryption.html