Перш за все, це НЕ покращує безпеку вашої програми (припустимо, що це веб-версія).
Використовуйте SSL (або насправді TLS, який зазвичай називають SSL), його не дуже дорого (Виміряйте час, який ви використовуєте, щоб знайти шляхи навколо нього та примножити його з мінімальною заробітною платою, купуючи сертифікат виграє майже завжди).
Чому до цього просто. TLS вирішує проблему (коли вона використовується із купленими сертифікатами, а не підписана самостійно), яка є досить великою в криптографії: Як я знаю, на якому сервері я розмовляю, це сервер, на який я думаю, з яким я говорю? Сертифікати TLS - це спосіб сказати: "Я, орган сертифікації, якому довіряє ваш браузер, засвідчує, що веб-сайт за адресою [url] має цей відкритий ключ із відповідним приватним ключем, який (приватний ключ) знає, виглядає лише сервер. Я підписав свій підпис у всьому документі, якщо хтось змінив його, ви можете бачити ".
Без TLS будь-яке шифрування стає безглуздим, тому що якщо я сиджу поруч з вами в кафе, я можу змусити ваш ноутбук / смартфон думати, що я сервер, а MiTM (Man in The Middle) - ви. У системі TLS ваш ноутбук / смартфон буде кричати "НЕЗАДАЧАЛЬНА З'ЄДНАННЯ", оскільки у мене немає сертифікату, який підписує орган, який відповідає вашому сайту. (Шифрування проти автентифікації).
Відмова від відповідальності: користувачі, як правило, клацають правою кнопкою через ці попередження: "Ненадійне з'єднання? Що? Я просто хочу, щоб мої фотографії кошенят! Додати виняток. Натисніть" Підтвердити. Натисніть " ТАК! Кошенята!"
Однак якщо ви дійсно не хочете купувати сертифікат, все-таки НЕ реалізовуйте хешування JavaScript на стороні клієнта (і використовуйте для цього бібліотеку standford (SJCL), НІКОЛИ НЕ ВПРОВАДЖАЙТЕ КРИПТО ВСЕ ВАС ).
Чому? Повторне використання пароля! Я можу вкрасти ваше cookie-сеанси (що дозволяє мені робити вигляд на вашому сервері, що я це ви) без HTTPS легко (див. Помилку). Однак якщо ви додасте на свою сторінку входу 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, однак, хакер зі зоряними повідомленнями, ймовірно, не буде знати, як / бути зацікавленим у цьому.) Отже, вони отримають доступ до вашого веб-сайту, але не до своєї електронної пошти / facebook / тощо. (для якого ваші користувачі, ймовірно, будуть використовувати той самий пароль). (Адреса електронної пошти буде або їхнім ім’ям для входу, або буде знайдено у їхньому профілі / налаштуваннях на вашому веб-сайті).