VBA для тех кто любит думать


Функция XOR - часть 2


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

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

 

Sub encrypt()

Dim a, b, c, d As String

 

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

 

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

 

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

 

b = "password"

 

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

 

c = ""

 

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

 

lentext = Len(a)

lenpass = Len(b)

 

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

 

For cn = 1 To lentext

 

В этой строке попробуйте разобраться самостоятельно. Здесь выполняется функция Xor с каждым символом исходной строки и соответствующим символом пароля, как бы "повторенным" на всю длину исходного текста. 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

c = c + d

 

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

 

Next cn

 

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

 

Selection.TypeText Text:=c




Начало  Назад  Вперед