Научная статья на тему 'Решение проблем шифрования данных дополнительным кодом'

Решение проблем шифрования данных дополнительным кодом Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
170
15
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ШИФРОВАНИЕ / ХРАНЕНИЕ ДАННЫХ / СЖАТИЕ ДАННЫХ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Попов А.В., Захарова О.И.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Решение проблем шифрования данных дополнительным кодом»

_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «ИННОВАЦИОННАЯ НАУКА» №12/2017 ISSN 2410-6070_

УДК 004.8

Попов А.В.

Студент 2 курса магистратуры факультета информационных систем и технологий Поволжский государственный университет телекоммуникаций и информатики

Захарова О.И.

К.т.н, доцент кафедры «Информационных систем и технологий» Поволжский государственный университет телекоммуникаций и информатики

г.Самара, Российская Федерация

РЕШЕНИЕ ПРОБЛЕМ ШИФРОВАНИЯ ДАННЫХ ДОПОЛНИТЕЛЬНЫМ КОДОМ

Аннотация

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

Ключевые слова Шифрование, хранение данных, сжатие данных

Данная статья является продолжением работы по разработке алгоритма унификации представления хранимой информации перед записью на носитель или передачей по каналу связи. Ознакомиться с идеей можно с помощью ссылок в конце статьи.

Изначально языком для реализации был выбран c# (для ОС семейства Windows NT фреймворк.^^ для Linux-based ОС фреймворк mono). Дальнейшим развитием разработки была выбрана реализация на языке с++, компиляция под ОС Windows и Linux-based и выпуск в продакшн отдельного модуля компрессии/декомпрессии данных. Программа на стадии первичной разработки представляла собой консольное приложение. Такое решение обеспечивало простоту компиляции без использования графических фреймворков, достаточно легкую переносимость между тестируемыми Осями и в целом способствовало весьма продуктивному течению работы над проектом.

В качестве кодирующей структуры был выбран switch-case, пример кода представлен на рис. 1. Данный подход решал задачу «в лоб». На каждый символ был назначен шифрующий ключ, преобразование так же производилось отдельно для каждого символа. Не трудно догадаться, что для кодирования латинского алфавита требуется 26 свитчей, а для кодирования с учетом строчных и прописных символов — в два раза больше. И это влекло бы за собой бесполезное разбухание кода, делающего его абсолютно нечитаемым и непригодным для рефакторинга. Помимо неудачного выбора конструкции для кодирования возникли проблемы с приведением типов и операциями над ними. Так для кодирования слова необходимо было парсить строку на наличие спецсимволов, разбивать строку на отдельные слова по логичному разделению пробелом (проблема разделителя в тексте до сих пор остается открытой), затем передавать каждое слово в массив-хранилище кодируемого текста, далее брать из этого массива каждое слово и кодировать его посимвольно. Не правда ли, много шагов для такой тривиальной задачи? Во время шлифовки алгоритма речи об оптимизации кода еще не шло. От кода требовалась работоспособность «любой ценой», в дальнейшем необходимо было бы искать оптимальные пути решения.

Компиляция под целевые платформы также доставила немало проблем. Дело в том, что поддержка фреймворков на ряде ОС различна. Если основанные на ядре Linux операционные системы поддерживают большинство версий фреймворка mono, то с ОС семейства Windows дела обстоят несколько иначе. Так, скомпилированный модуль для winXP может не запуститься на win7, с тем же успехом можно скомпилировать программу и под более новую версию ОС, тогда на старых версиях она не будет функционировать. Как итог: на целевую ОС требуется компилировать с детальным учетом спецификации

_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «ИННОВАЦИОННАЯ НАУКА» №12/2017 ISSN 2410-6070_

компонентов каждого экземпляра ОС.

Для выхода из сложившейся ситуации ставка была сделана на некомпилируемые языки. Стоит сразу отметить, что выбор пал на всем известный python версии 3.х, из-за богатой библиотеки и общей тенденции писать небольшие процедуры именно на этом языке. С использованием языка python ушла необходимость в использовании жесткой типизации данных при инициализации переменных. Да, c# позволяет создавать переменные типа var, и хранить в них данные без объявления типа. Однако, такое решение было отвергнуто на ранней стадии тестирования алгоритма. Причины будут описаны ниже. Наиболее очевидным преимуществом python в этом проекте стал компактный код. 26 латинских и 33 кириллических «свитча» были упакованы в словарь. Теперь для кодируемого символа ключ подбирается из структуры, а не по условию в switch-case.

def codeFITeC): codeLetters = ra,:6/b':l,c,:2/d,:3i,e,:4,f,:5l,g,:6i,h,:7,4,:8, case А : codeword = codeWord+0*Math.Pow(26,i);

1 j 1 :9, 'k' :16, 4' :11, 'm 1 :12, '|n' :13, 1 o' : 14, 'p' :15, 'q' :16r case "b":

1r': 17,'s1:18,11': 19,1u*:20,'v1:21,'w':22,1x':23,'y1i24, z':25} codeLettersKyrillic = {'a':ô, '6': 1,'в 1:2,1 г1 :3,'д':4,'e':5,'ж':6,'з':7, 'и':8,'й1:9,'к1:10,'л1 :11,1м1 :12,1н''о1:14, 'п':15,'p':16, с':17,'т';18,'у':19,'ф* :20,'х':21, 'м'=22,'ч':23,'ш':24,'щ1:25,'ъ':26, 'ы':27,'ь1:28, э':29,'ю':30,'я':31} case "В": codeword = codeWord+l*Math.Pow(26,i); break; case 'c": case 'C": codeword = codeWord+2*Math.Pow(26,i); ЬгАлк*

Рисунок 1 - Демонстрация компактности структур python и c#

Так же приятным бонусом в работе с python стало представление строк в качестве символьных массивов. Теперь для перебора кодируемых символов достаточно обращаться к ним по индексу в строке до последнего символа. Больше не нужно создавать дополнительные массивы для хранения отдельных слов. Для разделения слов в строке в условный оператор if передается условие, что при встрече одного из множества разделителей („\s","\t",","...) проиндексированные символы считаются словом и дальше идет кодирование последнего слова. Индексация строки и обращение по индексу к символам значительно сократило число итераций и преобразований, что в свою очередь экономит бесценное время выполнения. Улучшилась переносимость, за счет совместимости языка и интерпретатора целевой ОСи. В настоящий момент поддержка ведется только по ветке python 3.x версии. Однако, стоит заметить, что при такой реализации алгоритма не обязательно пересобирать ее из исходников для каждой ОС в случае включения ее в стандартный набор утилит, скажем в свободно распространяемые системы, такие как OpenSuse или Ubuntu. Достаточно будет просто включить.ру файлы в стандартную библиотеку скриптов операционной системы. Дальнейшая работа скриптов обеспечивается вызовом встроенного интерпретатора с путем до скрипта. Таким образом, для актуализации версии кодера достаточно будет в режиме суперпользователя заменить файл на более новый, что в разы проще, чем обновлять скомпилированный модуль, который может быть и не совместим с обновлениями системы, может конфликтовать со средой исполнения и вызывать подобные проблемы. Также пользователи вольны сами вносить правки в код, оптимизировать алгоритм и создавать на его основе форки, повышая производительность и эффективность своих накопителей.

Постепенно возникло желание сравнить производительность кода версий программы написанной на c# и python. На вход алгоритму подавался текст в 1М строк, строки заполнялись рандомно. Для чистоты эксперимента файл генерировался до начала обработки и подавался один для обоих алгоритмов. Для оценки времени выполнения задач арифметического характера был предложен алгоритм расчета тригонометрической функции. Коды c# и python идентичны. Результаты тестов были несколько неожиданными. Скомпилированная программа требовала порядка в 1.5-2 раза больше времени на решение идентичных задач. Ответ на данный вопрос кроется в технологии реализации используемых языков. Хоть с# и является компилируемым языком, но средой исполнения для него выступает фреймворк mono ra^net. Таким образом, язык использует ресурсы среды CLR, являющейся частью фреймворка для c#, что в свою очередь за счет увеличения числа задействованных модулей среды увеличивает и время исполнения программы. Python же, напротив, является языком в строго определенной среде исполнения — интерпретаторе языка, который использует только свои ресурсы. Плюсом к быстродействию так же выступает и реализация python — в разработке используется cpython, в основе которого лежат библиотеки, написанные на си. Данная реализация языка считается эталонной. Для большей переносимости кода можно

_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «ИННОВАЦИОННАЯ НАУКА» №12/2017 ISSN 2410-6070_

было бы использовать jpython, но потеря производительности на содержании виртуальной java-машины мне была не интересна, поэтому я остановился с выбором на cpython.

Ниже приведены ссылки на репозиторий проекта на github, а так же на статью, с которой все и началось.

Рисунок 2 - Ссылка на репозиторий github

Рисунок 3 - Ссылка на статью «Компрессия цифровых данных...»

Список литературы:

1. Попов, А.В. Компрессия цифровых данных промежуточным кодом/ А.В.Попов [Электронный ресурс]. -Режим доступа : https://elibrary.ru/item.asp?id=28090563

©Попов А.В., Захарова О.И., 2017

УДК 621.775.8

А.А. Салимьянова

студент, УГАТУ, г. Уфа, РФ salimyanova.aa@yandex.ru

СОВРЕМЕННЫЕ ТЕХНОЛОГИИ ПОЛУЧЕНИЯ КОМПОЗИЦИОННЫХ МАТЕРИАЛОВ

Аннотация

В статье обсуждены основные современные тенденции получения композиционных материалов.

Ключевые слова Композиционные материалы, технология, современные технология.

К современным материалам авиационной техники предъявляются очень высокие требования. Для выполнения этих требований необходимо применение новых современных технологий производства.

i Надоели баннеры? Вы всегда можете отключить рекламу.