Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование методом Цезаря 
:(
    Опции темы
olga90
Дата 13.3.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 30.1.2007

Репутация: нет
Всего: нет



Мне нужно реализовать шифрование методом Цезаря

Вот задание:

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

Буквы русскоязычного алфавита рассматриваем как массив, состоящий из 66 символов.
Я обозначаю этот массив как 
Const 
Код

Buk=['А',  'Б','Б','В','Г','Д','Е','Ё','Ж','З','И','Й', 'К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я', 'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы', 'ь','э','ю','я'] 


Т.е. каждый элемент массива Buk[i] , где i  - это номер символа в массиве, i изменяется от 1 до 66
A[1]=А, A[2]=Б, …A[33]=Я … A[66]=я.

Теперь я перемещаю в цикле исходный алфавит (например, на 2 символа) и получаю массив «B» для шифрации след. Образом
Код

t:=1;
For i:=1 to 66 do begin
 Inc(t,2);
  If t>66 then dec(t,66);
  В[i]:=Buk[t];
End;


Т.е. после этого B[1]=A[3]=В, B[2]=A[4]=Г, … B[64]=A[66]=я, B[65]=A[1]=А, B[66]=A[2]=Б

Т.е. массив B[66] должен теперь использоваться как ключ для шифрования

А как теперь мне зашифровать текст из файла???

PM MAIL   Вверх
Sunvas
Дата 13.3.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(olga90 @  13.3.2007,  16:15 Найти цитируемый пост)
А как теперь мне зашифровать текст из файла???

Ты описал как ты получаешь ключ для шифрования, но о том как именно тебе нужно зашифровать текстовый файл не сказал ни слова. smile 
Если нужно просто зашифровать, то поиск по форуму тебе поможет, а для начал посмотри вниз страницы.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
olga90
Дата 13.3.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 30.1.2007

Репутация: нет
Всего: нет



я же написала, что текст нужно зашифровать через  полученный массив со смещением (массив B[i])

Цитата

Шифр Цезаря заключается в том, что буквы алфавита располагаются по кругу (за буквой а буква я) и каждая буква шифруемого сообщения сдвигается на некоторое число, которое называется ключом.


Цитата

Шифр Цезаря реализует кодирование фразы путем «сдвига» всех букв фразы на определенное число n (в оригинальном шифре Цезаря число n равнялось 3). Если буква кодируемой фразы имеет в алфавите позицию j, то она в «шифровке» будет заменяться буквой, находящейся в алфавите на позиции j + n.

PM MAIL   Вверх
WaterProof
Дата 13.3.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


OverLapped



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.10.2006
Где: Москва

Репутация: нет
Всего: нет



Вот посмотри прогу в архиве. Кто-то давно просил сделать, я и сделал.. Может чем-нибудь поможет...

Присоединённый файл ( Кол-во скачиваний: 296 )
Присоединённый файл  ________.rar 6,16 Kb
PM MAIL ICQ   Вверх
olga90
Дата 13.3.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 30.1.2007

Репутация: нет
Всего: нет



WaterProof,  спасибо - щас посмотрю

А у тебя нет точно такого же только через массивы? Или строка(как в твоем примере) это и есть массив?
PM MAIL   Вверх
sergejzr
Дата 13.3.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Цитата(olga90 @  13.3.2007,  15:15 Найти цитируемый пост)
А как теперь мне зашифровать текст из файла???

Читаешь букву из файла, находишь её номер (А=1,Б=2,В=3, итд)
Допустим номер i. 
Потом делаешь i=(i+сдвиг) mod 36
Выбираешь из массива букву под индексом i и записываешь её в вывод.



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
olga90
Дата 13.3.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 30.1.2007

Репутация: нет
Всего: нет



sergejzr,  не поняла - можно пример
и почему делим именно на 36 ???
PM MAIL   Вверх
MetalFan
Дата 13.3.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



смотри модуль в аттаче. выдрано из JVCL.
там как раз класс TJvCaesarCipher. наверное то, что и нужно 

Присоединённый файл ( Кол-во скачиваний: 108 )
Присоединённый файл  JvCipher.pas 9,46 Kb


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
sergejzr
Дата 13.3.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Цитата(olga90 @  13.3.2007,  18:01 Найти цитируемый пост)
sergejzr,  не поняла - можно пример
и почему делим именно на 36 ??? 

на 33 конечно, это опечатка
Потому что в алфавите 33 букв.

Пример?

Код

//Массив
Buk=['А',  'Б','Б','В','Г','Д','Е','Ё','Ж','З','И','Й', 'К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я']

//Читаем букву
bukva_in=read(infile);

//находим букву
index:=0;
For i:=0 to 33 do begin
  If Buk[i]= bukva_in then index:=i;
End;

//пишем со сдвигом
write(outfile,Buk[(i+sdvig) mod 33]);


ПС:
Это макет. Паскаля хорошо не помню.
если массивы в паскале начинаются с еденицы, то ессно надо соответственно подправить границы

Добавлено @ 19:29 
MetalFan, зачем человека большим количеством букв пугать? Там делов-то на пару строк.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
WaterProof
Дата 13.3.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


OverLapped



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.10.2006
Где: Москва

Репутация: нет
Всего: нет



olga90
Строка это и есть массив символов. Все правильно... smile 
PM MAIL ICQ   Вверх
Sunvas
Дата 13.3.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Для начала: 
olga90
Цитата(olga90 @  13.3.2007,  16:15 Найти цитируемый пост)
Я обозначаю этот массив как 

так обозначаються множества, а не массивы.
Интересно, как у тебя такое 
Цитата(olga90 @  13.3.2007,  16:15 Найти цитируемый пост)
В[i]:=Buk[t];

вообще скомпилилось??

Вот моя реализация. В примере показана работа со строкой, но для файла думаю не трудно будет следать.
Код

const Buk:array[0..65] of char=('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й', 'К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я', 'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы', 'ь','э','ю','я');
var b:array[0..65] of char;
i,j:word;
s,s2:string;
begin
For i:=0 to 65 do //Формирование нового массива
    b[i]:=Buk[(i+1) mod 66];


s:='СтРоКа'; //Шифрование и тест :)
s2:='';
for i:=1 to length(s) do
  for j:=0 to 65 do
    if s[i]=b[j] then s2:=s2+b[(j+1) mod 66];
s:='';
for i:=1 to length(s2) do
  for j:=1 to 66 do
    if s2[i]=b[j] then s:=s+b[(j-1) mod 66];
showmessage(s);



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
olga90
Дата 14.3.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 30.1.2007

Репутация: нет
Всего: нет



Sunvas, спасибо - то что нужно  smile 
PM MAIL   Вверх
Sunvas
Дата 14.3.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(olga90 @  14.3.2007,  12:19 Найти цитируемый пост)
Sunvas, спасибо - то что нужно   

Приходите еще.  smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.