您好我正在使用CodeIgniter制作应用。
我想将数字ID加密为加密字符串。
这
到
http://example.com/post/v4th54u654khi3f23of23ir2h398eh2xi012
我尝试了内置的加密库
$这 - > encrypt->编码(6)
但是它会为每个页面加载生成不同的加密字符串,这不是我想要的,我希望永久链接就像Youtube视频ID一样。
我需要加密的字符串也可以解密。
答案 0 :(得分:4)
您是否在配置文件中设置了$config['encryption_key'] = "Test@123";
OR
你必须在字符串
之后传递密钥 $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)
这将有相同的结果。
答案 1 :(得分:0)
Codeigniter为此提供了一个库,您只需添加autoload.php文件即可 并且您可以使用以下行进行编码和解码。 也许你会为ex编码相同的值。 &#34; $一个&#34;多次编码值$ encodedA有所不同但是当你去解码时你将总是得到$ decodingA = 123。 $ a =&#39; 123&#39 ;; $ encodedA = $ this-&gt; encrypt-&gt; encode($ a); $ decodingA = $ this-&gt; encrypt-&gt; decode($ encodedA);
答案 2 :(得分:0)
最简单的方法是:
编码:$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>";
}
}
}
Cosidering config / config.php已经下降了:
$config['encryption_key'] ="key_here"
和
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+=';
答案 3 :(得分:0)
用于生成加密ID,就像YouTube手表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
答案 4 :(得分:0)
您可以将ID隐蔽为SHA1,而不必尝试编码和解码。 sha1将生成字母数字密钥,因此您也不会收到url支持错误。无需编码解码。这将生成安全的加密代码。
$random_key = sha1($leadDetails->lead_number);
答案 5 :(得分:-1)
对于这些,由于mycrpt而库无法在php 7上运行-> 新图书馆:https://www.codeigniter.com/user_guide/libraries/encryption.html