我正在尝试使用codeigniter登录,但无法执行此操作。 然后我尝试从DB复制密码并将其传递给dycription-> decode()函数,并且它返回空字符串。
这是代码
var_dump($this->encryption->decode('s0xxxxxxXjrUxxxxxxBTxxxxhc'));
输出为:字符串(0)""
此代码也返回空字符串
$decoded_password = $this->encryption->decode($encoded_password);
$decoded_username = $this->encryption->decode($encoded_username);
我在这里做错了什么?
更新:我尝试加密字符串并打印IT然后解密并打印,加密后返回NULL / Empty,解密后返回NULL / Empty(明显)。 代码如下
$encval = $this->encryption->encode('codeigniter');
echo $encval.' -- IT WAS --'.'codeigniter';
echo "<br>---------------------------------------------------<br>";
echo $this->encryption->decode($encval);
OUTPUT:^ Nothing
答案 0 :(得分:1)
看,有两种方法可以在CI中使用加密,两者都不应该用于密码(使用散列)。首先找出哪一个用于加密密码然后存储在DB中。另外,在加密密码检查时可能还会使用某种KEY。
以下是CI中可用的2个加密库。
1.加密课程:https://www.codeigniter.com/user_guide/libraries/encrypt.html
2.Encryption Lib:https://www.codeigniter.com/user_guide/libraries/encryption.html
答案 1 :(得分:0)
我已经通过使用Codeigniter的加密库解决了这个问题,我的应用程序中当前使用的库有点修改,所以它破了。现在
$this->encryption->decrypt($cipher-text);
$this->encryption->encrypt($plain-text);
这很完美。我不得不用加密/解密替换所有编码/解码。
感谢你的时间guyz
答案 2 :(得分:0)
我也遇到了这个问题。我的问题来自数据库列varchar长度限制。.因此,密文丢失了部分。.我将列长度从50更改为250,然后默认选项解码和编码正常工作
答案 3 :(得分:0)
注意*:如果未加载驱动程序,您可能需要加载驱动程序
$this->encryption->initialize(
array(
'driver' => 'openssl',
'cipher' => 'aes-256',
'mode' => 'ctr',
'key' => '123456' // OR any hash if empty then takes from config file
)
);
// 切换到 MCrypt 驱动
$this->encryption->initialize(array('driver' => 'mcrypt'));
// 切换回 OpenSSL 驱动
$this->encryption->initialize(array('driver' => 'openssl'));
参考:https://codeigniter.com/userguide3/libraries/encryption.html