Сохранение и восстановление пароля из MySQL БД - PullRequest
0 голосов
/ 19 апреля 2020

Я знаю, что сохранение паролей в виде обычного текста в базе данных - это плохо, но мне нужно сохранить пароль так, чтобы пользователи могли его просматривать и просматривать.

База данных будет расположена в нашей сети. хост и доступ к нему будут ограничены известными 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 а также.

Пользователи должны видеть эти пароли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...