Microteam
Осваивающий
- Сообщения
- 74
- Репутация
- 34
Вот ребят представляю Вам, очень простой алгоритм шифрования. Я надеюсь, что большинство поймёт его реализацию. Этот алгоритм базируется на операции XOR (XOR-шифрование)(исключающее ИЛИ, деление по модулю 2). Можно описать XOR так: Это или то, но не всё разом. То есть:
1 XOR 0 = 1 Это
0 XOR 0 = 0
0 XOR 1 = 1 Или то
1 XOR 1 = 0 но не всё разом
Как видите если в левой или правой части есть 1, то будет 1, а если в обоих 0, то будет ноль. И если в обоих 1, то будет 0. То есть, если везде 1, то будет 0. (не всё разом )
Итак, вернёмся к нашему алгоритму. Это будет симметричный алгоритм, т.е шифрует и расшифровывает 1 ключ. Скажем что у нас есть буква, которую надо зашифровать, и пусть это буква будет R. Также у нас есть ключ, пусть ключ тоже будет буквой, но уже другой. Скажем буква D. В итоге:
Буква = R
Ключ = D
Теперь попробуем операцией XOR зашифровать букву R, буквой D. Узнаем ASCII коды этих букв.
Двоичный код буквы R: 01010010
Двоичный код буквы D: 01000100
Итак, шифруем:
01010010
01000100
00010110 - зашифрованная буква.
В общем, у нас есть 00010110 - это зашифрованная буква R, буквой D. А ещё точнее, это шифротекст.
Итак, давайте же попробуем расшифровать обратно. Применяем тот же алгоритм, но уже для шифротекста:
00010110 - шифротекст
01000100 - ключ
01010010 - расшифрованный текст.
Ой! Что мы видим? Двоичный код буквы R. Мы расшифровали букву. А давайте же, попробуем расшифровать другим ключом. Пусть новый ключ у нас будет, буква W.
Двоичный код буквы W: 01010111
Расшифровываем:
00010110 - шифротекст
01010111 - ключ (буква W).
01000001 - расшифрованная буква.
Теперь сравниваем код буквы R и код выше:
Код буквы R: 01010010
Код выше 01000001
Как видите код буквы R и код выше, не сходятся. Значит ключ неправильный.
Т.к., в нашем алгоритме может быть в шифре и в ключе, присутствовать не одна буква, то мы каждую букву в исходном тексте, будем шифровать каждой буквой ключа. Например:
Есть у нас слово: FOO
И ключ: BAR
Сначала мы шифруем (^ - это обозначение XOR):
F ^ B
F ^ A
F ^ R
O ^ B
O ^ A
O ^ R
и т.д.
Такой алгоритм хорош тем, что для шифрования, и расшифрования используется одна и та функция.
Реализуем на AutoIt:
Как видите текст успешно шифруется и расшифровывается. Я надеюсь, что Вы сейчас расширили свои познания в криптографии. Спасибо, что дочитали до конца .
1 XOR 0 = 1 Это
0 XOR 0 = 0
0 XOR 1 = 1 Или то
1 XOR 1 = 0 но не всё разом
Как видите если в левой или правой части есть 1, то будет 1, а если в обоих 0, то будет ноль. И если в обоих 1, то будет 0. То есть, если везде 1, то будет 0. (не всё разом )
Итак, вернёмся к нашему алгоритму. Это будет симметричный алгоритм, т.е шифрует и расшифровывает 1 ключ. Скажем что у нас есть буква, которую надо зашифровать, и пусть это буква будет R. Также у нас есть ключ, пусть ключ тоже будет буквой, но уже другой. Скажем буква D. В итоге:
Буква = R
Ключ = D
Теперь попробуем операцией XOR зашифровать букву R, буквой D. Узнаем ASCII коды этих букв.
Двоичный код буквы R: 01010010
Двоичный код буквы D: 01000100
Итак, шифруем:
01010010
01000100
00010110 - зашифрованная буква.
В общем, у нас есть 00010110 - это зашифрованная буква R, буквой D. А ещё точнее, это шифротекст.
Итак, давайте же попробуем расшифровать обратно. Применяем тот же алгоритм, но уже для шифротекста:
00010110 - шифротекст
01000100 - ключ
01010010 - расшифрованный текст.
Ой! Что мы видим? Двоичный код буквы R. Мы расшифровали букву. А давайте же, попробуем расшифровать другим ключом. Пусть новый ключ у нас будет, буква W.
Двоичный код буквы W: 01010111
Расшифровываем:
00010110 - шифротекст
01010111 - ключ (буква W).
01000001 - расшифрованная буква.
Теперь сравниваем код буквы R и код выше:
Код буквы R: 01010010
Код выше 01000001
Как видите код буквы R и код выше, не сходятся. Значит ключ неправильный.
Т.к., в нашем алгоритме может быть в шифре и в ключе, присутствовать не одна буква, то мы каждую букву в исходном тексте, будем шифровать каждой буквой ключа. Например:
Есть у нас слово: FOO
И ключ: BAR
Сначала мы шифруем (^ - это обозначение XOR):
F ^ B
F ^ A
F ^ R
O ^ B
O ^ A
O ^ R
и т.д.
Такой алгоритм хорош тем, что для шифрования, и расшифрования используется одна и та функция.
Реализуем на AutoIt:
Код:
Func CryptDecrypt($Data, $Key)
if $Data = '' OR $Key = '' Then Return '';
; Тут будет шифротекст
$Crypted = '';
$DLen = StringLen($Data); Длина исходного текста
$KLen = StringLen($Key); Длина ключа
; Цикл перебирает каждую букву из исходного текста
For $i = 1 To $DLen
$Char = StringMid($Data, $i, 1); Получаем букву
$CharCode = Asc($Char); Узнаем её ASCII код
$CryptedChar = $CharCode; Тут будет зашифрованная буква
For $u = 1 To $KLen
$KeyChar = StringMid($Key, $u, 1); Получаем символ из ключа
$KeyCharCode = Asc($KeyChar); Узнаем ASCII код
$CryptedChar = BitXOR($CryptedChar, $KeyCharCode); Выполняем операцию XOR
Next
$CryptedSymbol = Chr($CryptedChar); Получаем символ из шифра
$Crypted &= $CryptedSymbol; Добавляем символ к шифротексту
Next
Return $Crypted
EndFunc
$text = 'Привет! Это бессмысленный текст.'; исходный текст
$pass = 'qwerty123'; ключ
MsgBox(0, '', 'Исходный текст: '& $text&@LF&'Ключ: '&$pass);
$CryptText = CryptDecrypt($text, $pass);
MsgBox(0, '', 'Зашифрованный текст: '&$CryptText);
$DecryptText = CryptDecrypt($CryptText, 'qwerty123')
MsgBox(0, '', 'Расшифрованный текст: '&$DecryptText);
Как видите текст успешно шифруется и расшифровывается. Я надеюсь, что Вы сейчас расширили свои познания в криптографии. Спасибо, что дочитали до конца .