ЖУРНАЛ «СТА» №3/2004
После таких манипуляций файлы s.txt и r.txt должны оказаться абсо- лютно идентичными. Кроме того, в проекте представлена задача single — однопроцессорный ва- риант того, что мы предполагаем далее разложить на узлы кластера, то есть за- дачи поиска приемлемых ключей де- шифрования. Для поиска ключа де- шифрования используется простой ли- нейный перебор всех возможных зна- чений ключа заданной длины. Про- грамма (файл single.cpp ) выполняется с двумя аргументами, в качестве кото- рых используются имя исходного (де- шифрируемого) файла и длина ключа (точно в таком же формате будет запус- каться и её многопроцессорный ана- лог): #./single d.txt 2 Результаты работы этой программы будут сравниваться с результатами ра- боты её многопроцессорного аналога master (они даже имеют аналогичный по форме вывод). Но самое главное, для чего данная программа просто не- обходима, так это для сравнения вре- менных характеристик однопроцес- сорного и многопроцессорного испол- нения: #time single d.txt 2 #time master d.txt 2 Целесообразно заглянуть в текст программы single.cpp , чтобы позже к этому не возвращаться в более слож- ном многопроцессорном исполнении. Наибольший интерес представляет яд- ро программы: key bkey( keylen ), ckey( keylen ); while( ckey.next() != bkey ){ char *out = ckey.code( inp, slen ); if( test( out, slen ) ) cout << ckey; delete out; }; Из текста программы видно, что те- кущее значение ключа ( ckey ), переби- раемое в цикле и применяемое к деко- дированию байтовой последовательно- сти в буфере, сравнивается с началь- ным значением bkey (здесь это после- довательность «\0», а в общем случае она может быть произвольной). Когда весь диапазон возможных значений перебран, процесс завершается. Приведём некоторые итоговые ком- ментарии, чтобы более не возвращать- ся к рассмотрению целевой задачи. 1. Понятие критерия принадлежности декодированного результата к инте- ресующему нас множеству (то, что делает функция test ) — ключевое по- нятие всякого дешифрования. При- веденная мной простейшая функция анализирует полученный результат по принципу: каждый байт результи- рующей последовательности должен принадлежать к множеству англоя- зычных печатных символов (латин- ские литеры, цифры, знаки препина- ния, символы пробела и табуляции, перевод и возврат каретки). Естест- венно, что такая критериальная функция забракует русскоязычные тексты! Более того, она может при- знать приемлемыми несколько ре- зультатов: один для истинного ключа и ещё несколько — для ложных, воз- вращающих «белиберду», но «анг- лоязычную». Применённая в проекте критериальная функция – «байто- вая», то есть она принимает или за- браковывает один очередной байт без учёта какоголибо его контекста. При реальном дешифровании, после побайтового использования подоб- ной критериальной функции, к огра- ниченному подмножеству отобран- ных «кандидатов» должна применят- ся «контекстная» критериальная функция (статистика литер, анализ длины слов, разделяемых пробелами или знаками пунктуации и т.д.). 2. Ранее по тексту я уже употреблял термины «символьная последова- тельность» и «байтовая последова- тельность», и ещё неоднократно эти термины будут упоминаться далее. Чем они отличаются в данном про- екте? Практически ничем (я работаю с байтовым представлением симво- ла, unicode в этом проекте не исполь- зую), кроме того, что к «байтовым последовательностям» нельзя при- менять ни одну из функций группы str… — внутри «байтовой» строки вполне допустим значащий символ «\0»! 3. Сразу хочу подчеркнуть, что функ- ции code и test сделаны наихудшими с точки зрения эффективности. Функция code для каждой операции динамически выделяет буфер резуль- тата; кроме того, для любого значе- ния ключа она сначала делает пол- ную дешифрацию и только после этого результат передаётся критери- альной функции test . Если когото заинтересует эффективная реализа- ция, то это должно быть нечто сле- дующее: bool test(_Uint8t b){return b==‘\n’||b ==‘\t’||b== ‘\r’||(b>=‘‘&&b<=~’);}; П Р О Г РАММНО Е ОБ Е С П Е Ч Е НИ Е / СИС Т ЕМЫ Р Е АЛ Ь НО ГО В Р ЕМЕ НИ 57 СТА 3/2004 www.cta.ru Реле перегрузки J7TKN Промежуточные реле J7KNA-AR АвтоматическиевыключателиJ7MN ПРОМЫШЛЕННАЯ АВТОМАТИЗАЦИЯ КОММУТАЦИОННАЯ ТЕХНИКА Реле Преобразователи частоты Таймеры и счётчики Терморегуляторы Датчики Панельные индикаторы • Европейское качество по доступной цене • Большой набор принадлежностей • Расширенный диапазон температур Контакторы J7KN ОФИЦИАЛЬНЫЙ ДИСТРИБЬЮТОР OMRON #95 МОСКВА (095) 234-0636 • info@prosoft.ru • www.prosoft.ru С.-ПЕТЕРБУРГ (812) 325-3790 • root@spb.prosoft.ru • www.prosoft.ru ЕКАТЕРИНБУРГ (343) 376-2820 • info@prosoft.ural.ru • www.prosoft.ural.ru
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy