Электронные адреса в БД в зашифрованном виде на PHP, как реализовать? Всем доброго времени суток!
Я занимаюсь разработкой на PHP уже довольно давно, но с криптографией работал очень мало. И вот передо мной встала такая вот задача.
Есть в базе MySQL таблица `users`. В таблице есть поля: `uid` - id пользователя и `email` - адрес электронной почты пользователя.
Мне нужно написать php (используя только, общераспространенные модули php, например Mcrypt) код который: хранит все электронные адреса в зашифрованном видедолжна быть возможность искать пользователей по домену их email адресовиспользовать дополнительные поля или другие таблицы БД нельзя
Често говоря даже не знаю с какой стороны подступить к этой задаче. Подскажите как такое можно реализовать.

21 Авг 2019 в 07:13
225 +1
0
Ответы
1

Для зашифрования и хранения адресов электронной почты в зашифрованном виде в базе данных, вы можете использовать функции шифрования, например openssl_encrypt и openssl_decrypt в PHP.

Прежде всего, вам нужно создать ключи для шифрования. Например, вы можете сгенерировать ключ с помощью openssl_random_pseudo_bytes и сохранить его в безопасном месте.

Далее, вы можете использовать этот ключ для шифрования и расшифровки адресов электронной почты перед сохранением и после извлечения из базы данных. Например:

$key = 'your_secret_key_here'; // замените на ваш сгенерированный ключ
function encryptEmail($email, $key) {
$cipher = 'AES-128-CBC';
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$encrypted = openssl_encrypt($email, $cipher, $key, 0, $iv);
return base64_encode($iv . $encrypted);
}
function decryptEmail($encrypted_email, $key) {
$cipher = 'AES-128-CBC';
$ivlen = openssl_cipher_iv_length($cipher);
$iv = substr(base64_decode($encrypted_email), 0, $ivlen);
$encrypted = substr(base64_decode($encrypted_email), $ivlen);
return openssl_decrypt($encrypted, $cipher, $key, 0, $iv);
}

Теперь вы можете использовать эти функции для шифрования и дешифрования адресов email перед их сохранением и после извлечения из базы данных.

Для поиска пользователей по домену их email адресов, вам нужно будет сначала дешифровать все адреса email из базы данных и затем сравнить домен с помощью функции explode и end, например:

// Получаем все зашифрованные email адреса из базы данных
// Расшифровываем их и сравниваем домен
foreach ($users as $user) {
$decrypted_email = decryptEmail($user['email'], $key);
$domain = end(explode('@', $decrypted_email));
if ($domain == 'example.com') {
// Найден пользователь с email адресом на домене example.com
// $user содержит информацию о пользователе
}
}

Надеюсь, эта информация была полезной для вас. Удачи в решении вашей задачи!

20 Апр 2024 в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир