Похоже, ваш вопрос состоит из нескольких частей ...
Самый безопасный способ сохранить пароль в базе данных - это использовать хэш с семенами Salt + Pepper, как описано здесь . Если вы хотите найти хороший способ реализации этого конкретного метода в Java, попробуйте открыть новый вопрос .
Я понимаю, почему имеет смысл шифровать хэш имени пользователя / пароля перед отправкой на сервер, поскольку прокси-серверы SSL могут быть посредником в этой операции.
В качестве решения попробуйте создать токен в формате JSON или XML со следующими свойствами:
- Username.ToUpper () // Не хочу, чтобы это чувствительно к регистру
- ExpiryDate (скажем, плюс 5 минут)
- Nonce (случайное число, которое сохраняется на сервере для предотвращения повторных атак)
- подпись SHA 256
Используйте локально введенные имя пользователя и пароль для создания подписи SHA256, так как она будет постоянной. Используйте эту подпись для подписи JSON или XML, отправляемых на сервер при каждом запросе.
Другими словами, вы используете симметричный ключ на основе имени пользователя и пароля, не отправляя его по проводам. Конечно, вы можете посолить и приправить этот симметричный ключ для большей безопасности.
Это все, что я получил за дизайн высокого уровня, так как я не очень хорошо знаком с Java. Поделитесь своими ссылками / кодом, когда найдете ответы.