KCaptcha – довольно распространенная PHP библиотека для генерации CAPTCHA. Я довольно давно знаком с этим проектом, и так же давно меня не покидает одна мысль: «как там внутри все работает, как оно все устроено»? Да, бывает такое: мозг выделяет что-то, на первый взгляд крайне неприметное и непритязательное, но затем долгое время не упускает это что-то из головы. Так было с программированием, когда я впервые увидел кусочек кода на JavaScript, так стало и с библиотекой от Сергея Круглова, которую я и решил изучить.
Но обо всем по порядку. Не буду скрывать, разобрать и понять KCaptcha я пытался много раз. Мои попытки заканчивались неудачей. Этому способствовали, и минимум свободного времени, и очень малое количество комментариев в коде, и проблемы с мотивацией (она держалась только на интересе), но главным образом, конечно, отсутствие хоть какого-то опыта за плечами.
Шло время, я то брался за KCaptcha, то опять бросал. Но раз за разом, по маленьким шажочкам приходило понимание кода. Общая картина постепенно вырисовывалась. Возможно, кому-то это покажется смешным: подумаешь, генерация случайного ключа плюс вывод на изображение! Мне так не казалось. Сейчас я смотрю на данные алгоритмы немного свысока, но память о попытках понять, казолось бы запутанный и временами не поддающийся осмыслению код, не дает возможности посмеяться над собой.
А зачем вообще ковыряться в коде? Подключил, и используй себе на здоровье! Благо, библиотека позволяет легко абстрагироваться от ненужных деталей. Этот вопрос я задавал и себе, пока мне не пришлось работать над одним ASP.NET проектом. Тогда возникла необходимость в защите некоторых страниц от спаммеров. Думаю, не нужно объяснять, что самый простой и распространенный способ защититься от ботов это каптча.
Раньше я не использовал в работе ничего кроме PHP и, рузумеется, никогда не видел CAPTCHA-решений под .NET. Быстрый поиск в гугле ничего кроме оберток ReCaptcha на C# не дал. Более глубокий анализ хостингов для opensource проктов привел к некоторым результатам, но то были давно заброшенные, незаконченные поделки. Они даже отдаленно не напоминали знакомую и уже частично изученную KCaptcha.
За все предыдущее врямя я немножко поднабрался опыта, да и с мотивацией теперь был полный порядок. Решено! Мне предстоит перенос KCaptcha с PHP на .NET.