Codeigniter无法解码加密密码

时间:2013-02-22 14:19:46

标签: php codeigniter encryption

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

//这是来自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

5 个答案:

答案 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)

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