Вход в PHP при регистрации данных зашифрован AES - PullRequest
0 голосов
/ 11 февраля 2019

Моя таблица SQL содержит два типа данных, используемых для входа в систему. Первый - это электронная почта (в таблице с именем standard_name), а второй - пароль.Поскольку электронные письма шифруются AES с использованием ключа и IV (AES-256-CBC), нет никакой вероятности того, что зашифрованная электронная почта в файле PHP будет такой же, как электронная почта, зашифрованная в прошлом в базе данных (поскольку созданная для шифрования IVникогда не повторяется. Вот почему я хэширую пароль с md5. Поскольку хэш md5 всегда один и тот же, я могу запросить таблицу базы данных, используя пароль, введенный пользователем. Но что, если у определенных пользователей один и тот же пароль. Поэтому вход в систему только с паролемзапрос может вызвать проблемы для пользователей. Когда я понял, что создал код, который при первых запросах базы данных с использованием хэшированного пароля md5 проверяет, соответствует ли электронная почта, введенная пользователем, дешифрованному письму из базы данных, и если нет, то запрашивает базу данных в другой раз, но это предполагаетсячтобы получить только те записи, которые уже не имеют электронной почты, по сравнению с введенной пользователем. И есть проблема. Я не знаю, каким должен быть $ query5. Кто-нибудь может мне сказать? Или, может быть, есть гораздо более простой способ справиться с ведением журналав то время как электронная почташифруется с помощью AES.Вот мой код:

 $lname = mysqli_real_escape_string($connect, $_POST['email']);

            $password2 = mysqli_real_escape_string($connect,  $_POST['password']);

function pad($data, $size) {
    $length = $size - strlen($data) % $size;
    return $data . str_repeat(chr($length), $length);
}
function unpad($data) {
    return substr($data, 0, -ord($data[strlen($data) - 1]));
}

function encrypt($data) {
$key = "SiadajerSiadajer";
$iv_size = 16; 
$iv = openssl_random_pseudo_bytes($iv_size, $strong);
$encryptedData = openssl_encrypt(pad($data, 16), 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
$joinedData = hex2bin(bin2hex($iv).bin2hex($encryptedData));
$encodedJoinedData = base64_encode($joinedData);
return $encodedJoinedData."\n"; 
}

function encrypt2($data) {
$hashed = md5($data);
return $hashed; 

}

 $password2 = encrypt2($password2); 
 echo $password2;
 echo $lname;

    $stmt3 = mysqli_stmt_init($connect);

      $query4 = "  
      SELECT standard_name FROM standard  
      WHERE standard_password = ?    
      "; 
if(!mysqli_stmt_prepare($stmt3, $query4)){
echo "Failed to authenticate";
} else {
    mysqli_stmt_bind_param($stmt3, "s", $password2);
    mysqli_stmt_execute($stmt3);
$result = mysqli_stmt_get_result($stmt3); } 
while($row = mysqli_fetch_object($result)){
    $email = $row->standard_name;

}

     $emaildecrypted = decrypt($email);

  if($emaildecrypted === $lname){
      echo "authentication successful"
  } else {

       $stmt4 = mysqli_stmt_init($connect);

      $query5 = "  
      SELECT standard_name FROM standard  
      WHERE standard_password = ? BUT NOT WHERE standard_name = ?    
      "; 
if(!mysqli_stmt_prepare($stmt4, $query5)){
echo "Failed to authenticate";
} else {
    mysqli_stmt_bind_param($stmt4, "ss", $password2, $email);
    mysqli_stmt_execute($stmt4);
$result = mysqli_stmt_get_result($stmt4); } 
while($row = mysqli_fetch_object($result)){
    $email2 = $row->standard_name;


}

  }

  $emaildecrypted2 = decrypt($email2);

  if($emaildecrypted === $lname){
      echo "authentication successful"
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...