В настоящее время у меня есть PHP-скрипт, который подключается к почтовому серверу через IMAP и анализирует новые письма в MySQL. учетные данные для подключения к почтовому серверу хранятся в MySQL с использованием обычного текста, есть ли способ шифровать пароль, который хранится в MySQL?
MySQL поддерживает функцию AES_ENCRYPT () . Вы можете зашифровать, когда вы вставляете его в базу данных, и расшифровываете его, когда вы выбираете его обратно.
Прочтите документацию, к которой я привязан для примеров.
Затем убедитесь, что вы используете порт 993 для зашифрованного соединения TLS с сервером IMAP, когда вы imap_open () с паролем открытого текста.
В зависимости от того, какой сервер электронной почты должен аутентифицироваться. Если пароли необходимо отправлять с использованием обычного текста (возможно, потому, что сервер электронной почты сам хеширует), вы должны зашифровать свой пароль и затем дешифровать его перед отправкой на сервер электронной почты.
Если вы можете отправить хешированный пароль серверу, используйте его хэш-функцию (md5, sha1, sha512, …).
hash('sha1', $password); sha1($password); // Same result as above.
Если вам нужно зашифровать (чтобы иметь возможность расшифровать), вы можете использовать mcrypt или openssl.
http://php.net/manual/en/function.mcrypt-encrypt.php http://php.net//manual/en/function.openssl-encrypt.php
Разница здесь в том, что хешированный пароль нельзя разбить. Зашифрованный пароль может быть расшифрован.
Точка хеширования паролей заключается в обеспечении конфиденциальности и конфиденциальности для конечного пользователя в случае взлома базы данных. Очевидно, вы не можете использовать хеш-функции, потому что ваш скрипт должен прочитать пароль imap, чтобы вы зашифровали его с помощью некоторой симметричной функции криптографии (например, AES, blowfish, 3DES и т. Д.). Теперь вы столкнулись с проблемой хранения симметричного ключевого материала: сохранение его в той же базе данных совершенно неразумно, потому что взломать базу данных означало бы считывание ключа. Вы можете жестко закодировать ключевой материал внутри скрипта или внешнего txt-файла: теперь хакер должен скомпрометировать как сервер mysql, так и веб-домен для получения пароля imap, и это максимальный уровень безопасности, который вы можете достичь со стандартным php + домен общего назначения mysql.
Я использую эти функции или некоторые варианты их для входа. Он имеет тенденцию быть довольно безопасным, так как он объединяет пароли и хэширует их.
<?php function password_encrypt($password) { // Tells PHP to use Blowfish with a "cost" of 10 $hash_format = "$2y$10$"; // Blowfish salts should be 22-characters or more $salt_length = 22; $salt = generate_salt($salt_length); $format_and_salt = $hash_format . $salt; $hash = crypt($password, $format_and_salt); return $hash; } function generate_salt($length) { // Not 100% unique, not 100% random, but good enough for a salt // MD5 returns 32 characters $unique_random_string = md5(uniqid(mt_rand(), true)); // Valid characters for a salt are [a-zA-Z0-9./] $base64_string = base64_encode($unique_random_string); // But not '+' which is valid in base64 encoding $modified_base64_string = str_replace('+', '.', $base64_string); // Truncate string to the correct length $salt = substr($modified_base64_string, 0, $length); return $salt; } function password_check($password, $existing_hash) { // existing hash contains format and salt at start $hash = crypt($password, $existing_hash); if ($hash === $existing_hash) { return true; } else { return false; } } function attempt_login($username, $password) { $admin = find_admin_by_username($username); if ($admin) { // found admin, now check password if (password_check($password, $admin["hashed_password"])) { // password matches return $admin; } else { // password does not match return false; } } else { // admin not found return false; } } ?>