5

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

// 这是来自数据库

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

4

5 回答 5

5

请在配置中检查您的 codeigniter 字符集

$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)。我在这里使用加密密钥。您可以通过省略编码和解码中的第二个参数来使用配置中的默认值。

让我知道这是否有帮助

于 2013-02-25T08:32:00.633 回答
3

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

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

这将返回 7c4a8d09ca3762af61e59520943dc26494f8941b,它将存储在数据库中。

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

于 2013-02-22T15:43:26.267 回答
2

你有没有尝试过:

$this->encrypt->decode($string);
于 2013-02-22T15:51:48.227 回答
2

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

于 2014-08-03T12:34:46.670 回答
0

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

于 2013-07-28T07:46:30.353 回答