Click

Алгебраїчна captcha

Система компьютерной алгебры Maxima

Система комп'ютерної алгебри Maxima

Натрапив на просторах інтернетів на цікаву реалізацію технології captcha - користувачеві пропонується вирішити лінійне рівняння з одним коренем і ввести рішення в якості перевірочного коду.

Я, коли собі на блог шукав капчу, багато різних перепробував, але з таким цікавим підходом не стикався. Вирішив подивитися на неї ближче, відкрив код сторінки і розчарувався - завдання для капчі виводиться текстом, а не картинкою.
Загалом з цікавості вирішив її поламати :)

У загальному випадку дана captcha являє собою лінійне алгебраїчне рівняння (ax + b = 0). Для вирішення скористався безкоштовною системою комп'ютерної алгебри Maxima . (Ех, чому ж я не знав про неї на 1-3 курсах інституту?! Вона навіть на КПК здатна працювати!).

Рядок із задчей для капчі виходить з html-код сторінки приблизно в такому вигляді:

1
<b> (<i> x </ i> +9) ∙ 5 +4 = 64 </ b>

.
Від тегів

1
<b>

можна позбутися на етапі отримання потрібної рядки, але великої шкоди від них немає, так що для наочності залишив.

Далі рядок трохи обробляється для приведення до вигляду, придатного для вирішення в Maxima, потім слід власне рішення і далі - обробка виводу для виокремлення з нього потрібного перевірочного коду (висновок у Maxima досить детальний, навіть якщо застосувати опцію-quiet):

  #! / Usr / bin / perl
 use warnings;
 use strict;
 use encoding 'utf8';

 my $ input = '<b> (<i> x </ i> +9) ∙ 5 +4 = 64 </ b>';
 $ Input = ~ s |</?[ b, i]> | | ig;
 $ Input = ~ s / ∙ / * / ig;
 $ Input = ~ s /-/-/ ig;
 print $ input, "\ n";

 my $ out = qx / maxima - quiet - batch-string = solve "($ input );"/;
 my $ x = $ 1 if $ out = ~ m # \ [x = (-? \ s? \ d +) \] # gi;

 print $ x, "\ n";

 exit 0; 

Ось так мені пощастило за один вечір познайомитися з цікавою ідеєю для механізму captcha і дізнатися про прекрасну системі комп'ютерної алгебри Maxima.

Бажаю і вам побільше нових приємних відкриттів!

Ще на схожі теми:

Category Рубрики: Linux , Гаджети , Технократія | Tag Мітки: , , , , , | Comments Коментарів немає

Leave a Reply