ЖУРНАЛ «СТА» №3/2004
реализации проекта cluster114.tgz вер- сии 1.14. Эта версия отличается от ра- нее представленных в Internet: например, скорость кодированиядекодирования увеличена более чем в 6 раз, что позволя- ет экспериментировать с более длинны- ми ключами. Кроме того, для тех, кто не распола- гает установленной системой QNX, в данном архиве хранится полный исход- ный код проекта Appendix.doc. Для проведения испытаний в первую очередь понадобится собственно про- грамма начального шифрования про- извольного фрагмента текста – про- грамма подготовки исходных тестовых последовательностей. В проекте это программа codec . Поскольку она осу- ществляет основную операцию шиф- рования (XORсвёртку), а операция де- шифрования для этого метода симмет- рична, то очень бегло рассмотрим, что и как она делает. Программа codec (файл codec.cpp ) принимает три пара- метра в командной строке, например так: #./codec s.txt d.txt key , где s.txt – имя исходного текстового файла; d.txt – имя файла той же длины, в который будет записана результи- рующая последовательность; key – имя файла, содержащего бай- товую последовательность ключа. Длина ключа определяется непо- средственно из длины файла ключа. Реально в прилагаемом проекте эта и все далее приводимые команды зада- ются в виде: #time nice —n2 ./codec s.txt d.txt key Это позволяет, вопервых, фиксиро- вать системное время выполнения программы, а вовторых, запускать за- дачу с приоритетом, несколько ниже принимаемого по умолчанию в ОС (в QNX это 10), что препятствует «омертвлению» системы на достаточно продолжительное время выполнения задач, значительно загружающих про- цессор (то есть отслеживать реакции пользователя с приоритетом, несколь- ко выше приоритета загружающих ре- сурсы вычислительных задач). В тексте codec.cpp , кроме обработки параметров, нет значащих операторов, за исключением двух строк, в которых и производится считывание ключа из файла в специальную структуру key и кодирование исходной текстовой по- следовательности inp : key k( argv[ 3 ] ); char *out = k.code( inp, slen ) ; Всё, что связано со структурой key и процессом шифрованиядешифрова- ния, записано в файле coder.h. Объект класса key — это байтовая последова- тельность ключа (_Uint8t*) и её длина. Далее в классе переопределён ряд тра- диционных операций (инициализация, присвоение, сравнения, вывод в поток и т.д.). Определена операция rshift — нахождение ключа, «сдвинутого» отно- сительно исходного в сторону увеличе- ния (напомню, ключ может быть до- статочно длинным, более того – «про- извольной» длины, и арифметические «+» и «–» к нему неприменимы). Из целевых операций в классе key определена операция кодирования текстовой последовательности s дли- ны n : char*key::code(char*s,unsigned long n){ char *r = new char [ n ]; if( r == NULL ) return NULL; for( unsigned long i = 0; i < n; i++ ) r[i]=(char)((_Uint8t)s[i]^*(p +i%k)); return r; } ; Кроме класса key , в coder.h определе- на только единственная операция – тестирование полученной декодирова- нием байтовой последовательности на принадлежность к текстовым строкам и на признак непревышения длины слов (расстояния между такими симво- ламиразделителями, как пробел, табу- ляция, перенос строки и т.п.) в резуль- тирующем тексте константы MAX_WORD: booltest(constcharsrc[],unsignedlong srclen){ constchar*p=src; for(unsignedlongi=0,j=0;i<srclen;i++,j++,p++){ if(j > MAX_WORD )return false; if( *p > ‘ ‘ && *p <= ‘~’ )continue; if(*p==‘‘||*p==‘\n’||*p==‘\t’||*p==‘\r’){ j = 0; continue; }; return false; }; return true; }; Для упрощения отработки выбран именно симметричный алгоритм шиф- рованиядешифрования; двукратное применение программы codec должно возвращать нас к исходному виду шиф- руемого файла: #./codec s.txt d.txt key #./codec d.txt r.txt key 56 СТА 3/2004 П Р О Г РАММНО Е ОБ Е С П Е Ч Е НИ Е / СИС Т ЕМЫ Р Е АЛ Ь НО ГО В Р ЕМЕ НИ www.cta.ru #171 W130 – лёгкий, компактный, защищённый! Официальный дистрибьютор — компания ПРОСОФТ ● Процессор Intel Pentium M 1,1 ГГц ● До 1 Гбайт оперативной памяти ● Дисплей 12,1" TFT XGA, разрешение до 1024 × 768, возможность установки сенсорного экрана и/или дисплея повышенной яркости ● Беспроводной сетевой адаптер Intel/PRO Wireless (WiFi, IEEE 802.11b) ● Время автономной работы до 3,5 часов ● Размеры: 276 × 239 × 43 мм, вес 2,7 кг ● Рабочий диапазон температур от —20 до +55°С ПРОМЫШЛЕННЫЙ НОУТБУК с технологией Intel ® Centrino ™
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy