加密密码Mcrypt php比较表单和数据库值

时间:2015-07-09 23:44:37

标签: php mysql encryption mcrypt

我使用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。

0 个答案:

没有答案