Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter无法解码加密的密码_Php_Codeigniter_Encryption - Fatal编程技术网

Php Codeigniter无法解码加密的密码

Php Codeigniter无法解码加密的密码,php,codeigniter,encryption,Php,Codeigniter,Encryption,我制作了一个登录表单,用户在其中提交用户名和密码。如果用户名存在,我解码密码并检查是否与提交的密码相同 //这是db的 string(50) "v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno" //这是在解码上面的字符串之后 string(32) "�� U�U{q�0�4��è€UC��o�/�*�." 但它应该返回123456 对于编码,我使用 $this->encrypt->

我制作了一个登录表单,用户在其中提交用户名和密码。如果用户名存在,我解码密码并检查是否与提交的密码相同

//这是db的

string(50) "v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno"
//这是在解码上面的字符串之后

string(32) "�� U�U{q�0�4��è€UC��o�/�*�."
但它应该返回123456

对于编码,我使用

$this->encrypt->encode('123456');
这是秘密钥匙

$config['encryption_key'] = 'kRlaMneym7rF';
//编辑


问题是密码字段被设置为varchar 50,您想要散列,而不是加密,您可以使用CodeIgniter的加密库使用SHA1进行散列

$password = $this->encrypt->sha1('123456');
这将返回7c4a8d09ca3762af61e59520943dc26494f8941b,这将存储在数据库中

您无法取消密码哈希-您想根据数据库中的哈希值检查哈希输入。

您尝试过:

$this->encrypt->decode($string);

请检查配置中的codeigniter字符集

$config['charset'] = 'UTF-8';
相对于数据库的字符集。你的冲突很可能来自那里

对Codeigniter进行测试,看看它是否返回正确的结果。像以前一样尝试硬编码,或者在控制器中复制并测试

函数测试加密(){
$str='12345';
$key='my secret key';
$encrypted=$this->encrypt->encode($str,$key);
echo$this->encrypt->decode($encrypted,$key);
出口
}

矿山生产预期结果:12345。如果这样做有效,那么您的问题可能是字符集(CHARSET)。我用的是加密密钥。您可以通过在encode和decode中省略第二个参数来使用配置中的默认值


让我知道这是否有帮助

我已经解决了这个问题。我发现这是因为我用来存储unicode密码的表是latin1。我将users表字段密码更改为utf-8,这似乎解决了此问题

可能的原因可能是数据库中该字段的长度,这就是我的情况。我有一个字段太短。

您不应加密密码,而应将其散列。然后,当用户尝试登录时,对发送的值进行散列,并使用数据库中的散列进行检查。还有一些(盐类等),但基本上就是这样。如何解密数据?$this->encrypt->decode('v+bnphnhgqbcxrvu1vn8ty++cmq0oeazesvfcfslgnafgzno');如果这是一个不太可能帮助其他人的本地问题,则应删除该问题。否则,如果问题已经解决,你应该发布一个答案。