我做了一个登录表单,用户提交了他的用户名和密码。如果用户名存在,我解码密码并检查是否与提交的密码相同。
//这是来自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
答案 0 :(得分:5)
请在config
中检查您的codeigniter字符集$config['charset'] = 'UTF-8';
与数据库的charset相对照。你的冲突可能来自那里。
将Codeigniter放入测试并查看它是否返回正确的结果。尝试像以前一样进行硬编码,或者在控制器中复制并测试它。
function testencrypting(){
$str = '12345';
$key = 'my-secret-key';
$encrypted = $this->encrypt->encode($str, $key);
echo $this->encrypt->decode($encrypted, $key);
exit;
}
我的产生了预期的结果:12345。如果可行,那么你的问题可能是CHARACTER SET(CHARSET)。我在这里使用加密密钥。您可以通过在编码和解码中省略第二个参数来使用配置中的默认值。
如果有帮助,请告诉我
答案 1 :(得分:3)
你想要哈希,而不是加密,你可以使用CodeIgniter的加密库来执行此操作,该库使用SHA1进行散列。
$password = $this->encrypt->sha1('123456');
这将返回7c4a8d09ca3762af61e59520943dc26494f8941b,这将存储在数据库中。
您无法取消哈希密码 - 您希望根据数据库中的哈希检查哈希输入。
答案 2 :(得分:2)
你试过了吗?
$this->encrypt->decode($string);
答案 3 :(得分:2)
可能的原因可能是数据库中该字段的长度,这是我的情况。我的场地太短了。
答案 4 :(得分:0)