Php Codeigniter无法解码加密的密码
我制作了一个登录表单,用户在其中提交用户名和密码。如果用户名存在,我解码密码并检查是否与提交的密码相同 //这是db的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->
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');如果这是一个不太可能帮助其他人的本地问题,则应删除该问题。否则,如果问题已经解决,你应该发布一个答案。