mysql — вход в PHP при регистрации данных в зашифрованном виде AES

Моя таблица 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"}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector