Реверсивное шифрование между языками (PHP, Python)

У меня есть веб-форма, управляемая PHP, и я хотел бы иметь возможность ввести пароль, зашифровать его и загрузить в базу данных. Затем, используя Python, запросите этот пароль, расшифруйте его, а затем используйте его для аутентификации на почтовом сервере Microsoft Exchange с SMTPLIB. Остальная информация об аутентификации будет храниться в виде простого текста. Моя главная цель - не хранить пароль в виде обычного текста.

Единственная причина, по которой я пытаюсь использовать оба языка, заключается в том, что остальная часть "работы" для моей программы выполняется на Python. Я использую только PHP для простого интерфейса. Это только для последовательности.

Существует ли простая в использовании библиотека мультиязычного обратимого шифрования, которая может быть использована для этого?

Будет ли мне лучше сделать мой почтовый скрипт на PHP? Если это так, какая библиотека будет рекомендована для этой задачи?

2 ответа

Решение

Если вам нужно прочитать пароль обратно, используйте шифрование на уровне базы данных, а не на уровне приложения - просто убедитесь, что вы подключаетесь к базе данных локально или через SSL.

Для хранения пароля шаги будут выглядеть примерно так:

  • Компьютер >>
  • HTTPS >>
  • Веб-сервер (форма PHP) >>
  • (HTTPS, если на другом сервере >>)
  • база данных (шифрование AES)

В зависимости от базы данных, которую вы используете, синтаксис, вероятно, изменится, но с MySQL вы можете сделать что-то вроде:

INSERT INTO `table` (`password`) 
VALUES (AES_ENCRYPT('{$sPassword}', '{$sEncryptionKey}'))

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

Чтобы получить пароль с помощью вашего сценария Python, вам просто нужно выполнить инструкцию SELECT на сервере SQL с чем-то вроде (при условии, что данные находятся в зашифрованном BLOB-файле AES):

SELECT CONVERT(AES_DECRYPT(`table`.`password`, '{$sEncryptionKey}') USING 'utf8')
AS `password`

Таким образом, единственными общими данными, которые вам нужны между PHP и Python, является ключ шифрования (который является просто строкой). Пока вы поддерживаете SSL-соединение при каждой передаче этих данных через Интернет, у вас должно быть все в порядке.

AES симметричное шифрование:

Другие вопросы по тегам