CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Мышление в стиле Visual Basic

Андрей ГОНЧАРОВ info@vb.kiev.ua

(Продолжение, начало см. в МК № 6, 9—10, 19, 25, 27, 29—30, 33, 36—38, 45, 48, 3, 6—7, 12—13, 20—21 (125, 128—129, 138, 144, 146, 148—149, 152, 155—157, 164, 167, 174, 177—178, 183—184, 191—192)).
Пока мы толковали о шифровании в цикле статей «Мышление в стиле Visual Basic», как-то само собой подразумевалось использование стандартных методов шифрования, стандартных библиотек «стандартной» ОС... А ведь еще задолго до появления Windows пользователи древних компьютеров каким-то образом шифровали свои драгоценные данные, когда еще не было и в помине CryptoAPI... Более того, когда-то ведь не было и компьютеров!

Примитивное смещение по таблице ASCII

Ну да ладно — время бумажек с дырочками, выбитыми согласно таблице подстановок в латинском или другом алфавите (эдакая нехитрая Матрица :-)), канули в лету. А алгоритмы живут и по сей день, и будьте уверены, коллегия разработчиков-криптологов компьютерных библиотек нередко использует в качестве основы некоторые более архаические наработки. Итак, в одной из статей о CryptoAPI я упомянул метод шифрования по модулю 26. Как ни странно, это один из тех стандартов, который по определению быть стандартом не может. Наиболее приятной чертой его является закономерная расширяемость (уже, кажется обозначенная рамками Unicode) диапазона обрабатываемых ASCII-символов. Речь о том, что на время разработки алгоритм Mod26, подразумевающий прежде всего компьютерное шифрование, никак не рассчитан был на работу с кириллицей, к примеру. Однако как только в ASCII-ряду оказались дополнительные символы, название алгоритма впору бы и сменить — теперь мы можем кодировать от символа 32 (пробел) до символа 255 (наберите Alt+255). Ладно, шучу: можно использовать для шифрования все символы от 1 до 255. Символ с кодом 0 (ноль) шифруется, но очень долго и некачественно :-). А если серьезно, то нулевой символ несет в себе совершенно четко оговоренные функции, связанные с представлением символьных данных и прочей дребедени в системе Windows.

Не будем, однако, столь категоричными по отношению к праразработчикам: просто сменим имя функции на ModX, где X — диапазон кодов символов.

Преимущества собственных алгоритмов

Думаю, понятно должно быть каждому, что использование чужих API сопряжено с проблемой чужих компонентов, соблюдением определенных требований к ОС и Системе в целом, причем во внимание здесь следует брать как требования клиентского ПО, так и серверного (DLL, OCX). Минимальные софт-требования — для большинства CryptoAPI-функций вам потребуется минимум IE 4, Win98, пара-тройка СервисПаков. Собственные же алгоритмы не предоставляют такой надежности защиты, как встроенные в ОС, однако абсолютно не требовательны к окружающим факторам, могут быть легко перенесены на другие ОС (скажу более: они не привязаны к ОС, за исключением случаев комбинирования средств шифрования, когда один из этапов — например, извлечение хеша — использует advapi32.dll. Другое дело — разного рода серверные решения. Так, в руках разработчика на PHP имеется хеш-функция md5) поэтому лично я несколько чаще использую нечто абстрактное, когда касается некритических ситуаций с вынужденным «неглубоким» шифрованием.

Принцип

Все этапы выполнения алгоритма ModX можно разделить на четыре основных:

• Прохождение шифруемого текста по счетчику, — цикл от первого символа до последнего;

• Определение действия над символом в зависимости от его ASCII-кода;

• Определение ASCII-кода хеша в позиции, идентичной текущей позиции шифруемого текста;

• Добавление к новой строке нового символа, производного от исследуемого текущего символа.

Реализация. VB vs PHP. Ключевые моменты «для чайников»

Итак, для прохождения текста нам нужен цикл. В Visual Basic 4, 5, 6 (возможно, и в версии 3) для определения фрагмента текста (с серединки) введена функция Mid, принимающая в качестве аргументов начальную позицию и длину фрагмента (нам нужен один)... в PHP, кстати, аналогичная функция SubStr несколько более продвинута — для идентичного ее действия синтаксис должен быть таким: SubStr(<data>, <Индекс-В-Тексте>, <Длина-Фрагмента>), причем индексирование в строках для SubStr в PHP начинается с нуля, для бейсиковской Mid — с единицы. Для определения длины всего текста в VB имеется Len, которая просит только один параметр — исследуемую строку. Аналог в PHP —StrLen. Чтобы узнать ASCII-код символа, используют VB-функцию Asc. В PHP —Ord. Конкатенация строк в Visual Basic производится либо символами & (предпочтительно), либо плюсами. В PHP —точками. Основную трудность при шифровании в VB представляет получение хеша. Или же придется заставить пользователя ввести пароль длиной в исходный текст. Это безумие. Посему предлагаю прибегнуть к «засорению» пароля неким мусором — эффект будет подобным. За основу берется пароль — самое что ни на есть ключевое слово, «смешивается» с какой-либо «стандартной строкой». Да, это вам не md5... Любители поизгаляться могут обратиться к архиву «Мышления в стиле Visual Basic» — см. функцию CryptHashData. Пользователи PHP, у вас есть md5( ).

Получить символ из его ASCII-кода поможет Chr — в обоих случаях функция, реализованная в среде VB 6.0, приведена ниже.

Ее аналог на PHP4:

Как видно, я отдал предпочтение модулю 255, — мы-то имеем дело с символами, лежащими вне пределов латиницы, довольно часто. Конечно, присвоение переменной H в коде для VB таким образом, каким это сделал автор, — в виде необязательной переменной, получающей свое значение в параметре при входе, — никуда не годится. Оставьте решение этой задачки для себя. Остается надеяться, что я таки убедил вас использовать CryptoAPI для получения «полнометражного мусорного фрагмента».

Отвечая на вопросы...

Как-то получил я письмо, в котором читатель просит найти для него простейший путь исследования ассоциации файлового расширения с программой. Когда выяснилось, что программа, над которой он работает — файловый менеджер, и ассоциация требуется для его запуска, я подумал: а не использовать ли функцию Shell и не морочить себе мышку?

В этом случае беспокоиться не придется ни в отношении расширения файла, ни в отношении программ, ассоциированных с этим расширением — считайте, что вы дабл-кликнули в Проводнике. Для нахождения самого расширения можно использовать функцию шестой версии VB InstrRev путем поиска точки в имени файла. Для определения ассоциации найденного расширения можно использовать и модуль для работы с Реестром Windows — ищите данные в HKEY_CLASSES_ROOT\.<расширение>. Об этом писалось много раньше (см. http://www.vb.kiev.ua/articles/vbthink/pdf/).

* * *

Те, кто впервые узнает о возможности отлова нажатий клавиш во внешних программах с учетом Shift, Alt и Control, озадачиваются на долгие годы. Под Visual Basic`ом отслеживание обычных клавиш вообще не составляет труда, однако что касается функциональных клавиш, тут все не так просто. Для отлова нажатий комбинаций клавиш потребуется объявление API-функции GetAsyncKeyState, всех (желательно) констант для клавиш (все они есть в Win32API.txt — загрузите базовый файл и выберите Constants. Введите VK_ для ускоренного перехода. В Win32 префиксы VK означают «Virtual Key» — т. е. то, что нам нужно).

Все это помещается в стандартный модуль. В процедуре для таймера, интервал которого выставлен около 50-60 (примерно столько нужно для отлова нажатия комбинации клавиш человеком), прописывается нечто типа

(Проект VB 6.0 с полным листингом находится на http://www.vb.kiev.ua/code/mc/)

* * *

«...Можно ли воссоздать нечто подобное (имеется в виду МайКомПад с плагинами) в MS Word?..» — как-то спросили меня. Да, конечно, можно. И даже нужно. Объекты Word могут «плодиться» стандартными средствами (Referenced Library или же метод CreateObject). Плагины МКП являются практически такими же ActiveX-серверами, как и исполняемые файлы MS Office, так что принципиально способы работы с ними не отличаются. Что касается UI-надстроек в офисных приложениях — меню, кнопки, — все это управляется встроенными Офисными методами.

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov