Я знаю, что сохранение паролей в виде обычного текста в базе данных - это плохо, но мне нужно сохранить пароль так, чтобы пользователи могли его просматривать и просматривать.
База данных будет расположена в нашей сети. хост и доступ к нему будут ограничены известными IP-адресами, фактические сценарии, которые будут обращаться к базе данных, будут находиться в другом центре данных, который заблокирован для любого доступа к нашим указанным c известным IP-адресам.
То, о чем я думаю, - это создание ключа шифрования на основе уникального названия школы, местоположения и строки 64 ди git. Это обеспечит защиту пароля, который затем будет сохранен в базе данных.
Чтобы расшифровать это, сценарий должен будет прочитать название и местоположение школы из БД, добавить строку 64 di git и затем расшифровать пароль для отображения пользователю.
Когда он запускается, строка 64 di git не будет сохранена в скрипте, она будет передана по URL.
Использование этого { ссылка } Мне удалось получить пароль для шифрования и дешифрования. Но как только я сохраняю зашифрованный пароль в базе данных, он не дешифруется при повторном чтении из базы данных.
Код, который у меня есть на данный момент: Из исходного чтения базы данных у меня есть:
$school = $db['school'];
$location = $db['location'];
$password = $db['password']; // plain text
Затем я шифрую, используя:
define('ENCRYPTION_KEY', "{$school}r$qVsYRk4*&H?=pb9sRdJHLbtERBwGSxezJa5eG?Zb#SrC&q2yzHLE=BjU?Wm9sM{$location}");
$OpensslEncryption = new Openssl_EncryptDecrypt;
$encrypted = $OpensslEncryption->encrypt($password, ENCRYPTION_KEY);
и сохраняю $encrypted
обратно в свою базу данных.
Для расшифровки я читаю данные из базы данных и обрабатываю их как:
$school = $db['school'];
$location = $db['location'];
$password = $db['password']; // encrypted
define('ENCRYPTION_KEY', "{$school}r$qVsYRk4*&H?=pb9sRdJHLbtERBwGSxezJa5eG?Zb#SrC&q2yzHLE=BjU?Wm9sM{$location}");
$OpensslEncryption = new Openssl_EncryptDecrypt;
$decrypted = $OpensslEncryption->decrypt($password, ENCRYPTION_KEY);
Если я var_dump $decrypted
, я получаю NULL.
Если я дам дамп $encrypted
и $password
(после шифрования), они будут одинаковой длины строки.
Поле в базе данных определено как VARCHAR 1024
Может кто-нибудь посоветовать, как это сделать, или если есть более безопасный и надежный способ.
В конечном итоге мне нужно Пользователь может видеть пароли в виде простого текста, но хранить их как можно надежнее.
Спасибо
ОБНОВЛЕНИЕ
Пароль, хранящийся в базе данных, не принадлежит для пользователей, которые вошли в систему. Это пароли к нашим внутренним системам, которые все аутентифицированы по IP а также.
Пользователи должны видеть эти пароли.