Шифрование / Расшифровка между PHP и Javascript

Я хочу расширить этот вопрос: Obfuscating POST-переменные между Javascript и PHP

Где я придумал это решение: http://pastebin.com/YuAAZTLi

Он работает в 95% случаев, но 5%, с которыми я не могу справиться. Трудно по-настоящему основать его во время двух разных серверов. И отправить гниль с переменными просто слишком легко взломать.

Мне нужно что-то, что изменилось каждый раз, надеюсь, потому что я не хочу, чтобы HTTP POST-запросы просто дублировались. Какие методы шифрования существуют взаимозаменяемо между javascript и PHP, которые допускают шифрование типа md5. где

4500 выглядит что-то вроде Dusfh7sfSFJf78dfns8 и 4501 что-то вроде JF7Fhene7fdHfdshf6d .. ничего похожего, даже если они имеют 1 цифру.

Внешняя библиотека разрешена, но, пожалуйста, убедитесь, что вы связываете как php, так и javascript.

Это несколько специфично для случая обращения с логином пользователя, но я предложил протокол в этом ответе , и его попросили, и он закодировал версию входа в систему для PHP-to-JavaScript с поддержкой HTTP-сниффер.

Суть схемы:

  • Создать случайное значение nonce; это помогает предотвратить повторные атаки.
  • Отправьте это значение nonce и соль для пароля в браузер вместе с остальной формой входа.
    • Вы храните пароли в соленой и хешированной форме?
  • Когда пользователь вводит пароль, вместо этого сценарий в форме вычисляет и отправляет обратно хэш (хэш (пароль, соль), nonce).
  • Когда сервер получает представление формы, попросите его вычислить хеш (storedSaltedPassword, nonce) и убедитесь, что он равен представленному значению.
    • Сохраните значение nonce на сервере; не доверяйте клиенту повторять его вам, или ваша защита воспроизведения не исчезла.

Слабостью этой схемы является то, что хэши паролей в базе данных в некотором смысле эквивалентны паролю; в то время как, вероятно, невозможно извлечь исходный пароль, используемый для создания этих хэшей, знание сохраненного хеша достаточно для олицетворения пользователя на вашем сайте.

Просто используйте SSL. Это обычно поддерживается практически всем, и проблемы безопасности уже давно разработаны. Настройка немного сложна, но есть тонны информации о том, как это сделать; даже сертификаты не так дороги.