我使用mcrypt方法在数据库上创建加密密码的用户,如下所示:
$key = '1234567890123456';
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size);
$encryp_pass = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $password2, MCRYPT_MODE_ECB, $iv);
mysql_query("UPDATE usuarios SET pass_usuario = '".$encryp_pass."' WHERE id_usuario = '".$id_user[0]."' ");
...以便刚创建的用户存储在数据库中并加密密码。
现在,当该用户登录系统时,我所做的(或者我正在尝试做的事情)是加密他在文本字段上输入的密码,然后我将该值与数据库上的值进行比较。我加密密码的方式与创建用户时的方式相同:
$key = '1234567890123456';
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size);
$encryp_pass = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $password, MCRYPT_MODE_ECB, $iv);
$query_pass_existe = mysql_query("SELECT pass_usuario FROM usuarios WHERE nick_usuario = '".$nick."'");
$pass_user_fromDB = mysql_fetch_assoc($query_pass_existe);
然后我比较两个密码:从数据库中提取的密码和从登录表单加密的密码:
if (utf8_encode($encryp_pass) == utf8_encode($pass_user_fromDB['pass_usuario'])) {
echo 'both are equals';
}else{
echo 'they're totally different';
}
现在,我和两者都不一样。所以我打印它们以查看结果:
echo utf8_decode($pass_user_fromDB['pass_usuario']);
echo "<br>";
echo utf8_decode($encryp_pass);
echo "<br>";
但它们几乎相似,请看一下:
=???0?1y?Y7h???[.?0????1m
=???0?1y?Y7h???\[.?0????1m
它们几乎相同,但由于这个原因,我无法继续成功登录。我已经检查了该列,并将其设置为:utf8_general_ci。我正在考虑使用AES加密,但我在this文章中读到,对于mysql,最好使用mcrypt。