Это невозможно сделать.
Javascript, как вы знаете, на стороне клиента, и любой код на стороне клиента должен рассматриваться как потенциально скомпрометированный, поскольку вы не можете его контролировать.
В лучшем случае вы можете прибегнуть к отправке соленого хэша значения вместе с солью, но даже это само по себе может использоваться для проверки значений догадки перед фактической отправкой.
Все остальное зависит от звонков на сервер.
Согласно запросу на комментарий, вот общая идея:
Во-первых, на сервере вычислите случайную строку, которая будет использоваться в качестве соли. Это должно быть примерно уникальным каждый запрос. Цель этой строки - предотвратить атаки радужного стола .
Теперь, сохраняя эту строку отдельно, но также создайте еще одну строку, которая представляет собой конкатенацию случайной строки и ответа Captcha. Из этой новой комбинированной строки вы генерируете ее хеш (например, SHA-1).
using System.Web.Security;
...
string hashVal = FormsAuthentication.HashPasswordForStoringInConfigFile(combined, "SHA1");
Для того, чтобы javascript мог читать, необходимо разместить на странице случайную строку и значение хеш-функции.
На стороне клиента, когда пользователь отвечает на капчу, возьмите случайную строку и объедините ее с ответом (получая идею здесь?). Взяв эту строку, вы можете использовать нечто вроде SHA-1 JQuery-плагин , чтобы хэшировать его и сравнивать с предварительно вычисленным хэшем, который вы отправили.
hashVal = $.sha1(combinedString)
Если он совпадает, это (почти), безусловно, правильный ответ. Если это не так, то это 100% неправильный ответ.