febb: (Default)
febb ([personal profile] febb) wrote2012-05-12 11:11 pm

Программистическое...

Пока Россия еще спит, а америка уже пьяная, самое время написать небольшой пост который все равно будет не интересен никому.

На работе случилась приятная необходимость привинтить немного шифрования. Мне больше всего нравится RSA, потому, что теория чисел, которую я люблю, Джон Нэш по которому снят "Бютифул Майнд", простите за мой английский, ну и прочая математическая романтика.

Пошарившись немного в интернете, нашел конечно большие библиотеки с RSA. Но там настолько ужасный старый С-ишный код, времен первых Керниганов-Ричи, что мне стало тоскливо их привинчивать или выдирать оттуда. Ведь все, что мне надо - это буквально пару классов: BigInt и RSA. Самое страшное это были библиотеки EMC. Один простой пример генерирования ключа состоял из нескольких библиотек и полтора десятка файлов и бесконечно унылым С-кодом. В стиле _ДЫР_БУЛ_ЩИЛ* _пир_да_мон. От этих обрубков унылого коммерческого кодирования буквально сразу начиналась икота и мигрень. OpenSSL тоже что-то ужасное и отталкивающее. Вообще С++ придумали конечно что бы как-то скрасить это убогий ужас старого С.

Наверное я как-то неправильно искал. Но короче я нашел то что было мне нужно - два класса и ничего лишнего. Но это было написано каким-то наверное постдоком университета в Сараево. Все там работало, но было написано не программистом, а математическим гуманитарием. Работало примерно в 1000 раз медленнее, чем должно было.

И мне почему-то страшно захотелось все переписать самому, чем прикручивать ужасный куски чужого кода. Последние несколько дней я развлекался тем что написал BigInt с хранением не в смешных десятичных цифрах, что меня так смешило и умиляло, а машинных словах, которые можно естественно настроить на 32 и 64 разрядные платформы, а нам это придется делать.

Писать длинное сложение, вычитание и умножение - это умилительный экскурс в уроки устного счета при церковной приходской школе с мухами и ковырянием в носу. Это я сделал быстро. Хотя подумал конечно о Карацупе. Но некогда, да и чиселки маленькие все равно.

Зато деление немного доставило. Оригинальный смешной алгоритм с предиктор-корретором я улучшил наверное в 10000 раз на 1024 битных числах. Собственно я сразу все выкинул и поразвлекался написав свой предиктор-корректор. Получилось раз в 100 быстрее. Потом посмотрев на идиотский корректор понял, что если предиктор плохой, то корректор окончательно гробит алгоритм.

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

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

Получилось очень "чистенько", я погонял тесты на случайных числах. Оно шарашит теперь примерно 20 тысяч делений 1024 битных чисел в секунду на 32 разрядных словах и даже работает на 64 разрядных словах в пару раз быстрее на домашнем компе. За час пока я гулял у океана оно нафигачило 100 миллионов таких тестов без ошибочки.

Теперь чуть отполировать encoding-decoding и будет штучка. Если не найду ничего лучше готового, наверное попробую использовать, потому, что шифровать нам надо не большой объем данных, а скрыть кое какую технологию от гляделок любопытных и ручек загребущих. Ну и конечно поразвлекаться в шифровании и любимые детские игры в шпионов и разведчиков... :)

[identity profile] alex-argen.livejournal.com 2012-05-13 06:23 am (UTC)(link)
Прикольно) Я не программер, так, одним пальцев веб-программирование ковыряю, но в принципе, все понятно. Остается один вопрос - если получилась такая замечательная штука, которая несомненно многим пригодилась бы - почему не попробовать коммерческое ее использование?

[identity profile] febb.livejournal.com 2012-05-13 11:50 am (UTC)(link)
Я еще не закончил, не опробовал, не оценил успешность и не оценил нужно ли мне заниматься коммерцией)

[identity profile] vsukharev.livejournal.com 2012-05-13 06:28 am (UTC)(link)
ага,очень интересно,но ничего не понятно...главное,Вы довольны остались,и всем будет щастя.

[identity profile] febb.livejournal.com 2012-05-13 11:37 am (UTC)(link)
Конечно будет!))

[identity profile] artcan.livejournal.com 2012-05-13 06:33 am (UTC)(link)
А вот и враки, мне очень пост понравился :)
Тем белее, что люди очень редко так легко и радостно пишут о своей работе - всё больше ядом плюются)))

[identity profile] febb.livejournal.com 2012-05-13 11:45 am (UTC)(link)
Ну вот такое редкое событие - от души покодить)

[identity profile] ksht.livejournal.com 2012-05-13 06:50 am (UTC)(link)
Если под винду, то там встроенный RSA есть, максимальную длину ключа не помню.
Насчет ужасов опенсорса соглашусь, в львиная доля софта страшнее атомной войны, причем степень ужасности от языка мало зависит

[identity profile] febb.livejournal.com 2012-05-13 11:42 am (UTC)(link)
Нам нужно портабл код и для разных униксов.
Так что винды идут отсосут. Как обычно.

[identity profile] ivan-gandhi.livejournal.com 2012-05-13 08:09 am (UTC)(link)
Роскошно. Там же ещё со случайными числами нужно аккуратненько.

На гитхабе будет?

[identity profile] ivan-gandhi.livejournal.com 2012-05-14 06:42 am (UTC)(link)
Да обязательно! Гитхаб - это же свободное знание.

Тем более, должно стать популярным. Ведь любого здравомыслящего человека затрахивают эти эсэсэли с этими неуклюжими ключами, пемами, шифровками. В смысле, если человек знает, как там это малая теорема Ферма... но эх.

[identity profile] 3xyc.livejournal.com 2012-05-13 09:02 am (UTC)(link)
Аааа! Убил! Стругацкиевщина прям!

[identity profile] febb.livejournal.com 2012-05-13 11:44 am (UTC)(link)
Или Сталкеровщина...)

[identity profile] 3xyc.livejournal.com 2012-05-13 11:52 am (UTC)(link)
Это больше на "Понедельник начинается в субботу" похоже)) Там он Алдан программировал!

[identity profile] febb.livejournal.com 2012-05-13 12:06 pm (UTC)(link)
Надо будет перичитать)