febb: (Default)
[personal profile] febb
Пока Россия еще спит, а америка уже пьяная, самое время написать небольшой пост который все равно будет не интересен никому.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

febb: (Default)
febb

March 2022

S M T W T F S
  1 2 345
6 7 89 101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 06:21 pm
Powered by Dreamwidth Studios