|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.03.2008, 00:41 | #1 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 53
|
Цезарь с ключем
помогите кто-нибудь.. в делфи плохо разбираюсь, и не могу ничего придумать
нужно сделать шифрование цезаря используя ключевое слово (в edit2.text) вписывать в кратце можно представить так: исходный алфавит: абвгдеёжзийклмнопрст ключ: ёжик преобразованный алфавит:ёжикабвгдезйлмнопрст слово для шифрования: кабан шифр:йёжён у меня была такая идея: создать массив, и присвоить ему все элементы с символами, а потом начальным символам присвоить буквы от ключа, а дальше последовательно выписывать символы, и если будет повтор, то пропускается.. но чет не работает уже с самого начала begin for i=1 to 256 do begin m[i]:=chr(i); end; end; компилируется, однако при нажатии на кнопку выдает что то типа raised exeption class EAccessViolation with message 'Access violation at address 00403e8c' ну и т.д Последний раз редактировалось Karyuudo; 05.03.2008 в 10:52. |
05.03.2008, 00:47 | #2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Конечно будет Access violation. Вы цикл запускаете, не проверив длину строк и не взяв минимальную, тем более, если это обычные строки, максимальный индекс у них - 255, а не 256.
P.S. А с каких пор в шифре цезаря ключ используется? |
05.03.2008, 07:14 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
в исходном вопросе после слова "ШИФР: " просто написан бред!
Карудо, вы бы сначала поискали в яндексе/гугле, что такое алгоритм шифровки Цезаря! И, смею Вас заверить - НИ В ОДНОМ методе шифрования зашифрованная строчка не присутствует в ПОЛНОМ и нетронутом виде к криптограмме!! |
05.03.2008, 08:27 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
05.03.2008, 10:47 | #5 | |
Пользователь
Регистрация: 17.02.2008
Сообщений: 53
|
Цитата:
возможно вы не так поняли что имел ввиду, исходный алфавит, а не исходный текст нужно было написать.. после чего уже зашифрованный алфавит получается.. и на основе этих двух алфавитов и щифруется так для эксперимента, без цикла попробовал сделать так: m[3]:=chr(4) и все равно таже ошибка.. потому и не пойму, как сделать зашифрованный алфавит, если даже массив с символами не создается может не правильный тип данных у массива? m:array of string; Последний раз редактировалось Stilet; 05.03.2008 в 11:16. |
|
05.03.2008, 11:18 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Код:
I'm learning to live...
|
05.03.2008, 15:39 | #7 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 53
|
нет, непонятно...
так понимаю, поидее это работает так: пока I не будет = 256 , m будет присваиваться предыдущее значение+ i символ.. типа: m: 0 1 6 10 15 21 ... но что это даст? |
09.03.2008, 15:09 | #8 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 53
|
во, понял почему ошибка, не указал размерность массива...
вообщем попробовал дальше сделать, и вот что получилось: procedure TForm1.Button1Click(Sender: TObject); begin s:=edit1.text; k:=edit2.text; for i:=1 to 256 do begin m1[i]:=i; end; m2:=m1; for i:=1 to Length(k) do begin m1[256-i]:=ord(k[i]); end; for i:=1 to 256-Length(k) do begin if ****** end; end; вот никак не могу придумать, как записать, так, чтобы последовательно вписывать символы и если какойто символ присутствует в едит2.текст то заменяется на следующий символ, причем если следующий символ тоже есть в эдит2.текст, то опять пропускается..? и еще if m1[i]=k[1] or k[2] or k[3] or k[4] or ... ? как это можно записать по нормальному? Последний раз редактировалось Karyuudo; 09.03.2008 в 15:35. |
11.03.2008, 20:59 | #9 |
Пользователь
Регистрация: 17.02.2008
Сообщений: 53
|
вообщем шифрование данных получилось, однако как сделать обратно?
никак не получается... а вот алгоритм по которому шифруется: procedure TForm1.Button1Click(Sender: TObject); begin k:=edit2.text; //создание алфавита for i:=1 to 256 do begin m[i]:=i; end; //удаление ключевых символов из алфавита for j:=1 to Length(k) do begin n:=ord(k[j]); for i:=n to 255 do m[i]:=m[i+1]; end; // добавление ключевых символов в конец массива for i:=1 to Length(k) do m[256-i]:=ord(k[i]); s:=Edit1.Text; //шифрование текста for i:=1 to Length(s) do s[i]:=chr(m[ord(s[i])]); edit3.text:=s; end; |