Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 18:30   #11
alex.snap
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 14
По умолчанию

Кстати заметил одну не точность в цезаре. Мне кажется что не должен шифровать маленькие буквы заглавными английскими)
alex.snap вне форума Ответить с цитированием
Старый 09.10.2012, 18:32   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Во-первых, есть кнопочка "Правка", чтобы не плодить кучу сообщений
Во-вторых, все зависит от того, какой алфавит использовать.
Я использую общий для всех букв и цифр.

Update код будет меняться в самом первом моем сообщении
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 09.10.2012 в 19:04.
BDA вне форума Ответить с цитированием
Старый 10.10.2012, 15:58   #13
alex.snap
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 14
По умолчанию

Все таки покавырясь в коде удалоось разобраться, почему же он шифровал пробелы и не выводил знаки, теперь другая проблема возникла, вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
alfa,x,y: string;
k,i: integer;
c: char;
begin
if RadioGroup1.ItemIndex = 0 then
      begin
alfa := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' + 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
k:= StrToInt(Edit1.Text);
x := Memo1.Lines.GetText;
for i := 1 to Length(x) do
  begin
  if pos(x[i],alfa)<>0 then
    c:=alfa[(Pos(x[i],alfa)+k) mod length(alfa)]
  else c:=x[i];
  y:= y+c;
  end;
  memo2.Lines.Clear;
  Memo2.Lines.Add(y);
  Label2.Caption := 'Состояние шифровки: Метод цезаря успешно зашифрован!'
      end;
end;
Теперь проблема заключается в том что он не может шифровать длинный текст. за пример я взял сообщение из первого поста. зашифровал до слова "Всем доброго времени суток, к завтрешнему дн" и все) если поставить ключ 2 то он его полностью зашифрует. но вот разшифровывает опять же до слова "дн". в общем нехочет дружить со мной цезарь ):
alex.snap вне форума Ответить с цитированием
Старый 10.10.2012, 16:10   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Все же стоит делать -1 и +1.
Ошибка возникает, т.к. получается отрицательное число при расшифровке буквы ю.
Нужно, хотя бы так:
Код:
if pos(x[i],alfa)<>0 then
    c:=alfa[(Pos(x[i],alfa)-1+k+length(alfa)) mod length(alfa)+1]
  else c:=x[i];
Еще я брал остаток от деления на длину алфавита от ключа, чтобы уж точно не появилось отрицательных чисел.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.10.2012 в 16:16.
BDA вне форума Ответить с цитированием
Старый 10.10.2012, 18:48   #15
alex.snap
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Все же стоит делать -1 и +1.
Ошибка возникает, т.к. получается отрицательное число при расшифровке буквы ю.
Нужно, хотя бы так:
Код:
if pos(x[i],alfa)<>0 then
    c:=alfa[(Pos(x[i],alfa)-1+k+length(alfa)) mod length(alfa)+1]
  else c:=x[i];
Еще я брал остаток от деления на длину алфавита от ключа, чтобы уж точно не появилось отрицательных чисел.
Да вы правы, именно этих плюсиков и минусов не хватала.. при расшифровки надо писать
Код:
c:=alfa[(Pos(x[i],alfa)-1-k+length(alfa)) mod length(alfa)+1]
З.Ы. для тех кто возможно следит за темой..

Ну думаю с цезарем покончено, что ж теперь пристплю пожалуй к изучению остальных двух шифров
alex.snap вне форума Ответить с цитированием
Старый 10.10.2012, 19:17   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Вы все же пропустили важное замечание о размере ключа. Для полной устойчивости нужно взять k=k mod length(alfa).
(т.е. в моей реализации сначала производятся все преобразования ключа, а затем уже идет шифрование/дешифрование текста)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.10.2012, 19:24   #17
alex.snap
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 14
По умолчанию

Я уже завтра немного подправлю код и посмотрю что из этого получится, спасибо за помощь.

Все таки я оставил, цезаря и не мучал его больше. Так как не нашел необходимости.. Сегодня шифр цезаря прошел проверку на ура) есть пару косяков, но они не с толь значительны, как были раньше..

Кто нибудь хоть раз работал с шифром с периодическими ключом?
подскажите как его можно реализовать.

Последний раз редактировалось alex.snap; 11.10.2012 в 14:23.
alex.snap вне форума Ответить с цитированием
Старый 02.11.2012, 06:19   #18
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

подобие лозунгового шифра на с++
цезарь с ключевым словом весьма близок... только начинает не с первой буквы... а с первой буквы в ключе...
Вложения
Тип файла: rar shifr.rar (311.4 Кб, 12 просмотров)
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
k-е простое daniil123 Паскаль, Turbo Pascal, PascalABC.NET 0 14.12.2011 23:52
простое число Kukurudza Общие вопросы C/C++ 2 13.09.2011 14:43
Простое наследование Саааня Общие вопросы C/C++ 7 12.08.2011 00:45
Простое шифрование пароля на assembler artemr Помощь студентам 1 30.05.2011 11:42
Простое суммирование Trimbl Microsoft Office Excel 2 20.12.2010 08:58