Читаем Интернет-журнал "Домашняя лаборатория", 2007 №3 полностью

Среди математических логических функций, таких, как И, Или и других, есть весьма примечательная функция Хоr. Команда, выполняющая эту функцию, есть практически во всех языках программирования. Ее действие отражено в следующей таблице:



Иными словами, это некое подобие функции Или[15], которая в отличие от настоящей Или возвращает 0, если на входы было подано сразу две единицы.

А теперь — приглядитесь повнимательнее и обратите внимание на интереснейшую вещь: если на вход функции Хоr подать значение 1 входа и результат, то получится значение 2-го входа! И то же самое — со значением 2 входа и результатом: получается значение 1-го входа. Следовательно, зная итог функции Хоr и значение на любом из входов, можно получить значение на другом входе, то есть функция Хоr обратима.

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

11010101010110101001101010111110101010111110101010001…

Представляем так же пароль:

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

11010101010110101001101010111110101010111110101010001…

10010101010011100101010100111001010101001110010101010…

И теперь — шифруем: применяем к этим двум последовательностям функцию Хоr:

01000000000101001100111110000111111111110000111111011…

Все — шифрование закончено! Полученную последовательность можно хранить в качестве зашифрованного паролем файла. Ну, а когда потребуется расшифровка, то будет необходимо просто применить ту же самую функцию Хоr к этой последовательности вместе с паролем, и тогда в результате получится исходный текст. Преобразовать же последовательность нулей и единиц обратно в текст труда не составит.

Нетрудно понять, что, зная зашифрованный текст и часть незашифрованного, соответствующую определенной части зашифрованного, можно с помощью той же функции Хоr определить пароль, и затем с его помощью расшифровать остальную часть текста. Поэтому в современных системах защиты текста паролем используются более сложные способы, например, повторение пароля не подряд, а с определенными промежутками, с обратным расположением символов в пароле, с двойным шифрованием — результат первого шифрования снова шифруется другим паролем. Но принцип — использование функции Хоr — остается неизменным, именно из-за ее обратимости.

Функция Хоr, разумеется, присутствует и в VBA. Вот пример кода, реализующего возможности шифрования с ее помощью.

Sub encrypt

Dim а, b, с, d As String

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

а = "secret text from kgb agent from newyork rezidentura…"

Пароль: может запрашиваться от пользователя:

b = "password"

Итог шифрования:

с = ""

Узнаем длины каждой из строк — пароля и исходного текста:

lentext = Len(а)

lenpass = Len(b)

Собственно шифрование:

For cn = 1 То lentext

В этой строке попробуйте разобраться самостоятельно. Здесь выполняется функция Хоr с каждым символом исходной строки и соответствующим символом пароля, как бы "повторенным" на всю длину исходного текста. Mid берет из середины строки символ, Asc — превращает его в ASCII-код, Str — превращает число в строку, Trim — удаляет пробелы:

d = Trim(Str(Asc(Mid(a, cn, 1)) Xor Asc(Mid(b, ((cn — 1) Mod lenpass) + 1, 1))))

А теперь сделаем так, чтобы каждый символ занимал ровно три позиции, вне зависимости от величины его ASCII-кода. А иначе как потом при расшифровке разбивать строку на символы?

Select Case Val(d)

Case 0 To 9

d = "00" + d

Case 10 To 99

d = "0" + d

End Select

с = с + d

Ну вот и все, и так — с каждым символом из исходной строки:

Next cn

Теперь в переменной с — шифрованная строка, каждой исходной букве соответствует 3 символа. Ее можно записать, например, в документ:

Selection.TypeText

Text:=c End Sub

А теперь — программа расшифровки данных. Точно так же разберем ее по строкам.

Sub decrypt

Dim a, b, c, d As String

Строка для расшифровки:

с = "003004016001018027082016021025007083017029029009"

Пароль:

b = "password"

Итог расшифровывания:

а = ""

Узнаем длины каждой из строк:

lentext = Len(с)

lenpass = Len(b)

Собственно расшифровывание (попробуйте разобраться самостоятельно в структуре команды — это не так сложно):

For cn = 1 То lentext Step 3

а = а + Chr(Val(Mid(c, cn, 3)) Xor Asc(Mid(b, (Int(cn / 3) Mod lenpass) + 1, 1)))

Next cn

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

Selection.TypeText Text:=a

End Sub

Можно, конечно, еще добавлять в этот простой код всевозможные дополнения, например, функцию перевода строки цифр в строку символов, чтобы зашифрованный текст выглядел как бессмысленный набор букв. Но это — уже по желанию.



Открытый и закрытый коды


Перейти на страницу:

Похожие книги

Гостиная
Гостиная

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

Линиза Жалпанова , Линиза Жувановна Жалпанова , Наталья Михайловна Сухинина , Наталья Сухинина

Сделай сам / Дом и досуг
Справочник настоящего мужчины
Справочник настоящего мужчины

В книге собраны и обобщены практические рекомендации и инструкции, которые помогут мужчине оставаться настоящим «Джеймсом Бондом» как в экстремальных условиях, так и в повседневной жизни. Рассмотрено: как организовать слежку и наблюдение, уходить от погони, как общаться с сотрудниками правоохранительных органов, как обезопасить себя на улицах и в подворотнях мегаполиса, какие охранные системы применять для квартиры и офиса, как выжить на природе, как добывать пищу с помощью подручных средств и многое другое. Рассказано, как звонить с мобильного телефона при разряженном аккумуляторе, не бояться собак, готовить напитки и коктейли и др. Все рекомендации разбиты по темам.

Андрей Петрович Кашкаров

Сделай сам / Хобби и ремесла / Прочая справочная литература / Дом и досуг / Словари и Энциклопедии