Пароль правильно шифрует, но неправильно расшифровывает из базы данных

1

Пароль шифруется просто отлично. Но дешифрование странно. Это не дает мне расшифрованный пароль.

здесь результат/вывод расшифровки: http://prntscr.com/91q0rv

Структура таблицы: http://prntscr.com/91qgcs

Теперь я собираюсь опубликовать все связанные коды. Но чтобы сэкономить некоторое время, не забудьте взглянуть на login_db.php, где проблема возникает.

db.php

$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "";
$mysql_database = "db_bank";

$db = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die ("couldn't select any database");
mysql_select_db($mysql_database, $db) or die ("couldn't select any database");

mysql_query("set character_set_server='utf8'");
mysql_query("set names 'utf8'");


$key = 'Dr. Imran';
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);



register_db.php

include('db.php');

$fname=$_POST['fname'];
$username=$_POST['username'];
$password = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $_POST['password'], MCRYPT_MODE_CBC, $iv);
$password = base64_encode($password);
echo $password.'<br>';
$email=$_POST['email'];
$phone=$_POST['phone'];
$country=$_POST['country'];
$age=$_POST['age'];
$gender=$_POST['gender'];

$check="SELECT * FROM customers WHERE Username='$username'";
$results=mysql_query($check);

$check2="SELECT * FROM customers WHERE Email='$email'";
$results2=mysql_query($check2);

if(mysql_num_rows($results) == 0)
{ $check='true'; }

else
{ header("location: register.php?username=false"); }


if(mysql_num_rows($results2) == 0)
{ $check2='true'; }

else
{
    if($check!='true')
    { header("location: register.php?username=false&email=false"); }

    else
    { header("location: register.php?email=false"); }
}


if($check=='true' && $check2='true')
{
    for($i=0; $i<1; $i++)
    {
        $id=rand(2000,3000);

        $check3="SELECT * FROM customers WHERE ID='$id'";
        $results3=mysql_query($check3);


        if(mysql_num_rows($results3) > 0)
        { $i=-1;  }

        else
        {
            mysql_query("INSERT INTO customers (Fname, Username, Password, Email, Phone, Country, Age, Gender, ID) VALUES ('$fname', '$username', '$password','$email', '$phone', '$country', '$age', '$gender', '$id')");
            header("location: login.php?register=success");
        }
    }
}


mysql_close($db);



login_db.php

session_start();
include('db.php');


    $username = $_POST['UserOrEmail'];
    $email = $_POST['UserOrEmail'];
    $password = $_POST['password'];

    $qry="SELECT * FROM customers WHERE (username='$username' OR email='$email')";

    $results=mysql_query($qry);


    if(mysql_num_rows($results) > 0)
    {
        $rows = mysql_fetch_assoc($results);

        //Here is where the problem coming from
        $check = base64_decode($rows['Password']);
        $check = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $check, MCRYPT_MODE_CBC, $iv);

        if($password == $check)
        {
        $_SESSION['username'] = $rows['Username'];
        header("location: index.php");
        }
    }


    else { die("Login failed"); }



Надеюсь, это поможет вам определить проблему

  • 1
    Вы действительно должны использовать встроенные функции PHP для обеспечения безопасности пароля. Если вы используете версию PHP ниже 5.5, вы можете использовать пакет совместимости password_hash() .
Показать ещё 17 комментариев
Теги:
encryption

1 ответ

1
Лучший ответ

Вы генерируете новый $iv каждый раз при загрузке db.php. Вы должны сохранить это тоже, чтобы использовать тот же самый для шифрования и дешифрования.

  • 0
    Да. это может быть правдой. потому что расшифрованный пароль меняется каждый раз, когда я обновляю страницу. Решение?
  • 0
    Вы должны сохранить значение $iv вы используете для шифрования пароля, в отдельном столбце в вашей базе данных. Затем вам придется получить это значение при расшифровке.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню