Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Максим Филимонов.doc
Скачиваний:
35
Добавлен:
18.09.2019
Размер:
680.45 Кб
Скачать
    1. Установка языка Python

Имеется две актуальные версии Python, которые активно поддерживаются сообществом на данный момент: это версии языка 2.x и 3.x. Причем, обе версии разительно отличаются: при попытке запустить программу, написанную на 2.x в среде версии 3.x, выводится сообщение об ошибке. Следовательно, версии несовместимы.

Для разработки приложения, реализующего AES-шифрование, была выбрана версия языка Python 2.7. Пакет Python 2.7 можно скачать с сайта python.org по адресу http://python.org/ftp/python/2.7.3/python-2.7.3.msi.

Также, для написания программы нам понадобится текстовый редактор Notepad++ (который можно скачать с сайта notepad-plus-plus.org), либо одну из бесплатных IDE под Python (например, PyDev).

После установки всех необходимых программ, необходимо прописать переменную PATH для быстрого доступа к среде разработки из командной строки. Для этого необходимо выбрать в контекстном меню Мой компьютер – Свойства – Дополнительно – Переменные среды, найти переменную PATH и через точку с запятой ввести значение C:\Python27. После этого, если набрать в меню Пуск – Выполнить «cmd», а затем в командной строке набрать «python», запустится среда разработки python.

Но, для начала нам нужно написать программу, а затем уже запускать ее через командную строку. В третьей главе настоящей работы рассматривается алгоритм AES, который является стандартом де-факто в США и на данный момент самым надежным шифром для шифрования связи. Именно его реализацию мы и рассмотрим в данной главе.

    1. Библиотека PyCrypto на Python

Итак, ранее говорилось, что Python – это очень гибкий язык с открытым кодом, под который написано очень много библиотек. Перед тем, как перейти к собственной реализации AES-шифрования, хотелось бы вскользь пройтись по такой библиотеке как PyCrypto. На сайте PyCrypto.org можно скачать библиотеку под названием pycrypto версии 2.6, которая позволяет шифровать данные несколькими способами: от DES, Triple DES, AES до RSA. Если на компьютере установлен Python 2.7, то достаточно запустить пакет установки PyCrypto и с библиотекой можно работать.

1: >>> from Crypto.Cipher import AES

2: >>> from Crypto import Random

3: >>>

4: >>> key = b'Sixteen byte key'

5: >>> iv = Random.new().read(AES.block_size)

6: >>> cipher = AES.new(key, AES.MODE_CFB, iv)

7: >>> msg = iv + cipher.encrypt(b'Attack at dawn')

На сайте PyCrypto.org можно найти примеры программ для шифрования. Например, выше рассмотрен пример написания программы для шифрования алгоритмом AES.

Что же здесь происходит? Первые две строки описывают импорт необходимых библиотек из модуля Crypto. В четвертой строке описана строковая переменная key, которая, очевидно, является ключом.

Кстати, здесь необходимо поговорить о динамической типизации в Python. Динамическая типизация – это очень удобная особенность в Python. Здесь, как можно увидеть, нет объявления данных – память отводится сразу же при присвоении переменной значения. Python сам определяет, какой тип данных присвоить переменной. Поэтому, в любом месте программы, даже внутри цикла, может быть определена функция или переменная. Любая переменная, любой класс или функция в Python являются объектами. Даже типы являются объектами. В то же время, Python при работе оперирует не самими объектами а выделяет под них память и делает ссылки.

Но, вернемся к листингу кода. Строки 5 и 6 указывают на то, что мы создаем новый экземпляр класса Random и AES. Random создает случайный ключ, который потом записывает в переменную iv (инициализирующий вектор), а в AES-экземпляр передается три аргумента: ключ, формат AES-шифра (в данном случае Cypher FeedBack) и сгенерированный iv (инициализирующий вектор). В седьмой строке мы получаем зашифрованное сообщение (у экземпляра класса AES cipher есть метод encrypt).

В итоге, если сделать тестовую программу типа:

If __name__= =” __main__”:

print msg

И наша программа вернет зашифрованное сообщение, т.е. выведет msg.

Для расшифровки текста используется метод decrypt, который в качестве аргумента получает зашифрованный текст, и возвращает исходный текст.

Итак, посмотрим, какие алгоритмы шифрования можно использовать с данной библиотекой:

  • AES – алгоритм

  • DES – алгоритм

  • Blowfish – алгоритм

  • RSA

  • DSA

  • ElGamal

  • SHA

  • MD5

И еще несколько малоизвестных алгоритмов шифрования. С помощью данной библиотеки можно создать мощный генератор шифров, однако вернемся к чистой реализации нашего алгоритма (все примеры и все API-функции есть на сайте pycrypto.org).