Кpиптогpафия от папиpуса до компьютеpа



Шифры замены - часть 2


'пример шифрования заменой
     DECLARE SUB CodeAndPrint (Password!, Map%())
     DEFINT I-N: CLS
     DIM Map (40) : CONST Password = -231.157
     ' сообщение
     FOR i = 1 TO 40
     Map(i) = ASC ("A")
     NEXT
     FOR i = 1 TO 40
     PRINT CHR$ (Map (i) ) ;
     NEXT
     PRINT
     'шифровка
     CALL CodeAndPrint (Password, Map())
     ' расшифровка
     CALL CodeAndPrint ( Password, Map ( ) )
     END
     SUB CodeAndPrint (Password, Map())
     x = RND (Password)
     FOR i = 1 TO 40
     Map(i) = INT(32 * RND) XOR Map(i)
     NEXT
     FOR i = 1 TO 40
     PRINT CHR$ (Map (i) ) ;
     NEXT
     PRINT
     END SUB

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

     АААААААААААААААААААААААААААААААААААААААА
     ЦСТЙЙШАШЬЦБНЫЩЛЮЫБЮЛРШБТОЙУФИИЪЪТЯЭЗЦЯЗС
     АААААААААААААААААААААААААААААААААААААААА

У машинного многоалфавитного шифра замены с помощью операции XOR есть ряд очень слабых мест, которые нужно знать и учитывать использовании этого шифра. Серьезную неприятность может доставить обратимость этого шифра, так как для расшифровки применяется то же самое преобразование, что и для зашифровки. В том случае, если одно и то же сообщение должно быть послано нескольким адресатам и шифруется одним и тем же шифром может произойти так, что длина сообщения изменится из-за сбоя или ошибки. В этом случае будет получено 2 сообщения разной длины. Так, если имеем две шифровки s' и s", которые отличаются тем, что исходный текст сообщения оказался сдвинутым на один символ:
    




Содержание  Назад  Вперед