我制作了一个登录表单,用户在其中提交用户名和密码。如果用户名存在,我会解码密码,并检查是否与提交的密码相同。
//这是来自数据库
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);
一个可能的原因可能是数据库中该字段的长度,这就是我的情况。我的场地太短了。