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

21 Авг 2019 в 07:13
196 +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 Апр в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир