【问题标题】:Codeigniter cannot decode the encrypted passwordCodeigniter 无法解码加密密码
【发布时间】:2023-03-17 17:32:01
【问题描述】:

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

//这是来自数据库

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

【问题讨论】:

  • 你不应该加密你的密码,而是散列它们。然后,当用户尝试登录时,您对发送的值进行哈希处理,并使用数据库中的哈希值进行检查。它还有更多内容(盐等),但基本上就是这样。
  • 如何解密数据?
  • $this->encrypt->decode('v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno');
  • 如果这是一个本地问题,不太可能帮助其他人,那么您应该删除该问题。否则,如果问题已解决,您应该发布答案。

标签: php codeigniter encryption


【解决方案1】:

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

如果有帮助请告诉我

【讨论】:

    【解决方案2】:

    您想要散列,而不是加密,您可以使用 CodeIgniter 的加密库来完成此操作,该库使用 SHA1 进行散列。

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

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

    你不能un散列密码 - 你想检查散列输入与数据库中的散列。

    【讨论】:

      【解决方案3】:

      你试过了吗:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2015-04-01
            • 2013-05-23
            • 2011-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-10
            • 2012-10-03
            相关资源
            最近更新 更多