Intereting Posts
ZendFramework – Как создать optgroup и там вариант с помощью помощников вида? Проблема с турецким языком PHP .htaccess очистить URL с более чем тремя паразитами PHP: Преобразование <ul> <li> Тег дерева HTML в массив Проверьте, загружен ли мой javascript на сайте Laravel 5 Проверка правильности PHP: создание изображения из таблицы html Как выводить данные при использовании $ stmt-> fetch (PDO :: FETCH_ASSOC); Как загрузить файл PHP в переменную? Не удается подключиться с помощью mysql_connect к базе данных в хостинге ipage.com? Нужна помощь в создании запроса на основе значений фильтра ui PHP: пример формы, который будет шифровать строку запроса (GET) (скрытие данных, а не безопасность) PHP: Возвращает массив файлов расширения файлов внутри zip-файла? Запустите Gps как фоновое обслуживание и отправьте координаты на веб-сервер (PHP) Могу ли я использовать URL-адрес в качестве источника для imagecreatefromjpeg () без включения оберток fopen?

Сервер Android и PHP: шифрование и дешифрование данных

У меня есть приложение для Android, которое общается с моим собственным сервером. Поскольку у нас нет https, я хочу реализовать собственное шифрование данных. Сервер реализован в PHP.

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

Должен ли я использовать RSA? или существует безопасный способ обмена ключами?

Благодаря!

Вы должны использовать протоколы шифрования RSA и AES.

  • RSA шифрует / расшифровывает короткие строки (это тяжело для CPU).
  • AES шифрует / расшифровывает большие строки (это быстрее, чем RSA).

Так:

  1. клиент создает случайный ключ AES для каждого запроса (24 байта в порядке);
  2. клиент шифрует запрос строки (любой длины) с помощью ключа AES;
  3. клиент шифрует ключ AES с помощью ключа RSA PUBLIC;
  4. клиент отправляет на сервер как зашифрованные (AES, так и строку) (POST – это хорошо);
  5. сервер расшифровывает ключ AES ключ RSA PRIVATE;
  6. сервер расшифровывает строку с помощью ключа AES;
  7. сервер обрабатывает запрос строки;
  8. сервер шифрует строку ответа с тем же ключом AES;
  9. ответ сервера возвращается клиенту;
  10. клиент расшифровывает ответ с помощью ключа AES.

Взгляните на следующий проект с открытым исходным кодом в GitHub: github.com/rcbarioni/followzup

Сервер реализован с помощью PHP и есть API для PHP и Java. Связь между клиентом и сервером использует AES и RSA.

Библиотеки шифрования PHP и Java полностью совместимы. Java для Android также совместим.

Ну, я бы сделал одно из следующего – с уменьшением приоритета:

  • Скажите своему боссу, что HTTPS – это путь.
  • Используйте библиотеку SSL, такую ​​как openSSL
  • Используйте AES для сообщения и RSA для обмена ключом AES сеанса

Последний из них является наименее предпочтительным, поскольку есть много вещей, вы можете ошибаться и таким образом случайно нарушать безопасность. Только один пример: если вы используете как шифрование, так и сжатие, вы уязвимы для атаки CRIME …