Codeigniter无法解码加密的密码



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

//这是来自数据库

string(50) "v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno"

//这是在解码上面的字符串之后

string(32) "�� U�U{q�0�4��è€UC��o�/�*�."

但它应该返回12346

对于编码,我使用

$this->encrypt->encode('123456');

这是密钥

$config['encryption_key'] = 'kRlaMneym7rF';

//编辑

问题是密码字段被设置为varchar 50

请在配置中检查您的代码点火器字符集

$config['charset'] = 'UTF-8';

与数据库的字符集相比。你的冲突很可能就是从那里来的。

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

function testencrypting(){
  $str = '12345';
  $key = 'my-secret-key';
  $encrypted = $this->encrypt->encode($str, $key);
  echo $this->encrypt->decode($encrypted, $key);
  exit;

}

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

让我知道这是否有助于

您想要散列,而不是加密,您可以使用CodeIgniter的加密库来实现这一点,该库使用SHA1进行散列。

$password = $this->encrypt->sha1('123456');

这将返回7c4a8d09ca3762af61e59520943dc26494f8941b,这是将存储在数据库中的内容。

您不能un对密码进行哈希处理-您希望根据数据库中的哈希检查哈希输入。

您尝试过吗:

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

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

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

最新更新