Прежде всего, это НЕ улучшает безопасность вашего приложения (если это веб-приложение).
Используйте SSL (или на самом деле TLS, который обычно называют SSL), это не очень дорого (Измерьте время, которое вы используете, чтобы найти способы обойти это, и умножьте его на минимальную заработную плату, покупка сертификата почти всегда выигрывает).
Почему это просто. TLS решает проблему (при использовании с купленными сертификатами, а не самозаверяющими), которая довольно серьезна в криптографии: как я узнаю, что сервер, с которым я разговариваю, является сервером, с которым, как мне кажется, я разговариваю? Сертификаты TLS - это способ сказать: «Я, центр сертификации, которому доверяет ваш браузер, удостоверяю, что веб-сайт по адресу [url] имеет этот открытый ключ с соответствующим закрытым ключом, который (закрытый ключ) знает только сервер, посмотрите Я подписал подпись по всему документу, если кто менял, вы можете увидеть ".
Без TLS любое шифрование становится бессмысленным, потому что, если я сижу рядом с вами в кофейне, я могу заставить ваш ноутбук / смартфон думать, что я сервер, а MiTM (Man in The Middle) - вы. С TLS ваш ноутбук / смартфон будет кричать «НЕДОСТАТОЧНОЕ СОЕДИНЕНИЕ», потому что у меня нет сертификата, подписанного центром сертификации, который соответствует вашему сайту. (Шифрование против аутентификации).
Отказ от ответственности: пользователи, как правило, нажимают прямо на эти предупреждения: «Ненадежное соединение? Что? Мне просто нужны мои фотографии котят! Добавить исключение. Нажмите« Подтвердить », нажмите« УРА! »Котята!
Однако, если вы действительно не хотите покупать сертификат, все же ОБЯЗАТЕЛЬНО реализуйте хеширование javascript на стороне клиента (и используйте для этого стандартную библиотеку (SJCL), НИКОГДА НЕ РЕАЛИЗУЙТЕ КРИПТО САМ ).
Зачем? Повторное использование пароля! Я могу легко украсть ваш файл cookie сеанса (который позволяет мне представить вашему серверу, что я - это вы) без HTTPS (см. Firesheep). Однако, если вы добавляете javascript на свою страницу входа в систему, который перед отправкой хеширует ваш пароль (используйте SHA256 или даже лучше, используйте SHA256, отправьте им открытый ключ, который вы сгенерировали, а затем зашифруете хешированный пароль с его помощью, вы не сможете использовать соль с этим), а затем отправляет хешированный / зашифрованный пароль на сервер. ПОВТОРИТЕ хэш на вашем сервере с солью и сравните его с тем, что хранится в вашей базе данных (сохраните пароль следующим образом:
(SHA256(SHA256(password)+salt))
(также сохраните соль как открытый текст в базе данных)). И отправьте свой пароль вот так:
RSA_With_Public_Key(SHA256(password))
и проверьте свой пароль вот так:
if SHA256(RSA_With_Private_Key(SHA256(sent_password))+salt_for_username) == stored_pass: login = ok
Потому что, ЕСЛИ кто-то обнюхивает вашего клиента, они смогут войти в систему как ваш клиент (захват сеанса), но они НИКОГДА не увидят пароль в виде открытого текста (однако, если они не изменят ваш javascript, однако, хакер Starbucks, вероятно, не будет знать, как / быть заинтересованным в этом.) Таким образом, они получат доступ к вашему веб-приложению, но не к своей электронной почте / facebook / и т. д. (для которого ваши пользователи, вероятно, будут использовать один и тот же пароль). (Адрес электронной почты будет либо их логином, либо будет найден в их профиле / настройках в вашем веб-приложении).