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