Вопрос № 178345: Здравствуйте, уважаемые эксперты! Помогите мне, пожалуйста, с заданием! 1. Разработать программу, осуществляющую шифрование и расшифрование текста методом простой замены и поддерживающую ввод ключей в виде «символ открытого текста» – «символ...
Вопрос № 178345:
Здравствуйте, уважаемые эксперты! Помогите мне, пожалуйста, с заданием! 1. Разработать программу, осуществляющую шифрование и расшифрование текста методом простой замены и поддерживающую ввод ключей в виде «символ открытого текста» – «символ зашифрованного текста» Зашифровать фразу своим личным ключом методом одиночной перестановки, сохраняя ключ и текст конфиденциальными для других 2. Разработать программу, осуществляющую шифрование и расшифрование текста методом шифра Гронсфельда, сохраняя
ключ и текст конфиденциальными для других
В наиболее простом методе символы шифруемого текста заменяются другими символами, взятыми из одного (одно- или моноалфавитная подстановка) или нескольких (много- или полиалфавитная подстановка) алфавитов. Самой простой разновидностью является прямая замена, когда буквы шифруемого сообщения за¬меняются другими буквами того же самого или некоторого другого алфавита. Для повышения стойкости шифра используют так называем
ые полиалфавитные подстановки, в которых для замены символов исходного текста используются символы нескольких алфавитов. Известно несколько разновидностей полиалфавитной подстановки, наиболее известными из которых являются одно- (обыкновенная и монофоническая) и многоконтурная. При полиалфавитной одноконтурной обыкновенной подстановке для замены символов исходного текста используются несколько алфавитов, причем смена алфавитов осуществляется последовательно и циклически, т.е. первый символ заменяется соответствующим
символом первого алфавита, второй — сим¬волом второго алфавита и т. д. до тех пор, пока не будут использованы все выбранные алфавиты. После этого использование алфавитов повторяется. Частным случаем рассмотренной полиалфавитной замены является так называемая монофоническая замена. Особенность этого метода состоит в том, что количество и состав алфавитов выбираются таким образом, чтобы частоты появления всех символов в зашифрованном тексте были одинаковыми.
При таком положении затрудняется криптоанализ зашифрованного текста с помощью его статистической обработки. Выравни¬вание частот появления символов достигается за счет того, что для часто встречающихся символов исходного текста предус¬матривается использование большего числа заменяющих эле¬ментов, чем для редко встречающихся. Полиалфавитная многоконтурная замена заключается в том, что для шифрования используется несколько наборов (контуров) алфавитов используемых циклически, причем каждый контур в общем
случае имеет свой индивидуальный период применения. Этот период, исчисляется, как правило, количеством знаков, после зашифровки которых меняется контур алфавитов. Шифр Гронсфельда состоит в модификации шифра Цезаря числовым ключом. Для этого под сообщением пишут ключ. Если ключ короче сообщения, то его повторяют циклически. Шифровку получают будто в шифре Цезаря, но отсчитывая необязательно только третью букву по алфавиту, а ту, которая сдвинута на соответствующую
цифру ключа. Так, применяя в качестве ключа группу из трех начальных цифр числа π, а именно 314, получаем шифровку:
сообщение с о в е р ш е н н о с е к р е т н о Ключ 3 1 4 3 1 4 3 1 4 3 1 4 3 1 4 3 1 4 3 шифровка ф п ж и с ь и о с с а х и л ф и у с с
Чтобы зашифровать букву сообщения С используя первую цифру ключа 3, отсчитывается третья по порядку от С в алфавите буква С-Т-У-Ф и получается буква шифровки Ф.
Отвечает lamed, Бакалавр :
Здравствуйте, Карина Комратова! Шифрование/дешифрование с использованием шифра Гронсфельда. Проверял в ABC-Pascal. Процедуры и функции не использовал из методических соображений.
Код:
program p178345; { Шифр Гронсфельда состоит в модификации шифра Цезаря числовым ключом. Для
этого под сообщением пишут ключ. Если ключ короче сообщения, то его повторяют циклически. Шифровку получают будто в шифре Цезаря, но отсчитывая необязательно только третью букву по алфавиту, а ту, которая сдвинута на соответствующую цифру ключа. Так, применяя в качестве ключа группу из трех начальных цифр числа PI, а именно 314, получаем шифровку:
сообщение с о в е р ш е н н о с е к р е т н о Ключ 3 1 4 3 1 4 3 1 4 3 1 4 3 1 4 3 1 4 3 шиф
ровка ф п ж и с ь и о с с а х и л ф и у с с
Чтобы зашифровать букву сообщения С используя первую цифру ключа 3, отсчитывается третья по порядку от С в алфавите буква С-Т-У-Ф и получается буква шифровки Ф. } const n=4; ABC: array[1..n] of string = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz', 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя');
var s1, s2, s3, key, AdoptedKey: string;
i, j, StrLen, KeyLen: integer; shift: integer; OldPos, NewPos: integer; begin write('Открытый текст '); readln(s1);
write('Ключ '); readln(key);
// Получение ключа длиной, равной длине строки текста StrLen := length(s1); KeyLen := length(key);
if (KeyLen >= StrLen) then AdoptedKey := copy(key,1,StrLen) else // Ключ короче шифруемой строки begin Adop
tedKey := ''; for i:= 1 to StrLen div KeyLen do AdoptedKey := AdoptedKey+key; AdoptedKey := AdoptedKey + Copy(key,1,StrLen mod KeyLen); end; writeln(AdoptedKey);
// Шифрование s2:= ''; for i:= 1 to StrLen do begin for j:= 1 to n do begin OldPos := pos(s1[i], ABC[j]); if OldPos>0 then break; end; if OldPos>0 then begin
shift := ord(AdoptedKey[i])-ord('0'); NewPos := 1+(OldPos+shift-1) mod length(ABC[j]); s2 := s2+ABC[j][NewPos]; end else s2 := s2+s1[i]; end; writeln('Шифрованная строка ',s2);
// ДеШифрование s3:= ''; for i:= 1 to StrLen do begin for j:= 1 to n do begin OldPos := pos(s2[i], ABC[j]); if OldPos>0 then
break; end; if OldPos>0 then begin shift := ord(AdoptedKey[i])-ord('0'); NewPos := 1+(OldPos+length(ABC[j])-shift-1) mod length(ABC[j]); s3 := s3+ABC[j][NewPos]; end else s3 := s3+s2[i]; end; writeln('Дешифрованная строка ', s3);
end.
Код:
Открытый текст Окончен бой, погас очаг, и не осталось ничего Ключ 123456 123456123456123456123456123456123456123456123 Шифрованная строка Пмссько дто, ссжеч ръдз, к сй пухдрфтю снэёес Дешифрованная строка Окончен бой, погас очаг, и не осталось ничего
Ответ отправил: lamed, Бакалавр
Ответ отправлен: 15.05.2010, 21:57
Номер ответа: 261419
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261419
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.