Как я понимаю в вашей ситуации, запрос POST отправляет и "текст", и "хеш" на сервер CAPTCHA. Затем он использует любую хеш-функцию, которую они используют для хеширования вашего текста, проверяет, соответствует ли он хешу, и решает, успешно ли вам это удалось. Предположительно, сервер отправляет вам изображение, а также хеш, а затем вы вводите текст.
Таким образом, если бы вы выяснили функцию хеширования, вы бы полностью сломали эту систему CAPTCHA: все, что вам нужно было бы сделать, это хешировать любую строку, используя их функцию хеширования, а затем при отправке запроса POST игнорировать хеш они отправили вас и просто отправили им ваш вычисленный текст и хэш-пару. Таким образом, вы можете очень легко автоматизировать успешное прохождение теста CAPTCHA.
Чтобы проиллюстрировать, насколько трудным может быть «обращение» хеша, рассмотрим следующий хеш, который они вполне могут использовать:
- Разделите ТЕКСТ на чередующиеся буквы: таким образом, ABCDE становится ACE и BD
- md5 две половины с использованием солей "fj49w0utw4a" и "r8h3wlsd"
- md5 ("fj49w0utw4a". "ACE"): 115c05f0e5300f958ba01caa64b989f
- md5 ("r8h3wlsd". "BD"): 74eecae86ef46382eb95443a1b1fa8f5
- Возьмите каждый 3-й символ первой строки и каждый 4-й символ второй и чередуйте их, пока не получите 15 символов.
- 115c05f0e5300f958ba01caa64b989f становится 55e09b1ab9
- 74eecae86ef46382eb95443a1b1fa8f5 становится e8425af5
- Конечное хеш-значение для "ABCDE": 5 e 5 8 e 4 0 2 9 5 * 1 036 * B * 1 037 * а * 1 038 * 1 F а * ** +1042 тысячу сорок-один *
Нет никакого способа, которым вы когда-либо собираетесь его реконструировать.
UPDATE
Обратите внимание, что CAPTCHA, как описано выше (и реализовано на этом сайте), крайне небезопасны, поскольку для них требуется знать только одну действительную комбинацию текста / хеша
Чтобы продемонстрировать, используйте Firebug или его эквивалент и перейдите в область CAPTCHA формы. Мы будем редактировать некоторые скрытые значения.
Существует несколько способов уменьшить эту уязвимость. Как предположил Тангрс, вы можете сохранить значение хеш-функции в переменной сеанса, чтобы клиент не мог им манипулировать. Менее элегантным, но также эффективным является сохранение представленной CAPTCHA в базе данных и не допускать дублирования CAPTCHA, как это реализовано по ссылке в вопросе. Это нормально, пока вы не начнете исчерпывать неиспользованные капчи и не столкнетесь с коллизиями.