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

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

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

Восстановить пароль
Повторная активизация e-mail

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

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

Всем доброго времени суток, к завтрешнему дню нужно написать 3 шифра: Шифр Цезаря, Шифрование с периодическим ключом и лозунговый шифр. Почти работает шифр цезаря, но есть некие непонятные мне проблемы, про остальные шифры ничего вообще не знаю. Поиск в гугл ничего к хорошему не привел.
Помогите пожалуйста.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
alfa,x,y: string;
k,i: integer;
c: char;
begin
alfa := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
if RadioGroup1.ItemIndex = 0 then
k:= StrToInt(Edit1.Text);
x := Memo1.Text;
for i := 1 to Length(x) do
  if Pos(x[i],alfa)<>0 then
  begin
  c:=alfa[(Pos(x[i],alfa)+k) mod length(alfa)];
  Memo2.Lines.Add(c);
  end;
//--------Конец шифра
end;

Последний раз редактировалось alex.snap; 09.10.2012 в 12:24.
alex.snap вне форума Ответить с цитированием
Старый 09.10.2012, 12:58   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

http://www.codeproject.com/Articles/...ion-Techniques
waleri вне форума Ответить с цитированием
Старый 09.10.2012, 13:57   #3
alex.snap
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
если честно то половину не понятно того что там написано. Если можно помогите найти на делфи шифры)
alex.snap вне форума Ответить с цитированием
Старый 09.10.2012, 17:30   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Меня заинтересовала эта тема, поэтому выкладываю свои наработки. Пока только шифр Цезаря. По идее, должен нормально работать (вроде все учел). Возможно появятся и остальные шифры

17:55 Update Шифрование с периодическим ключом - шифр Виженера вроде подходит на эту роль
19:00 Update Чуть изменены функции шифрования и появился незаконченный код лозунгового шифра
20:05 Update сделаны все 3 метода (последний метод не очень красиво реализован)

ПС Все требует тщательного тестирования, так как код пишется в реальном времени, а не берется уже отлаженный из закромов
Вложения
Тип файла: zip шифрование.zip (9.7 Кб, 63 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 09.10.2012 в 20:06.
BDA вне форума Ответить с цитированием
Старый 09.10.2012, 17:40   #5
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

шифровки которые есть ... сделаны конечно на билдере с++... но при большом желании могу перевести на паскаль или дельфу...

по возвращении домой с работы проверю тему... и возьмусь за "помощь"...

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

Последний раз редактировалось VIK_aka_TOR; 09.10.2012 в 17:50. Причина: найден лозунговый шифр
VIK_aka_TOR вне форума Ответить с цитированием
Старый 09.10.2012, 17:51   #6
alex.snap
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Меня заинтересовала эта тема, поэтому выкладываю свои наработки. Пока только шифр Цезаря. По идее, должен нормально работать (вроде все учел). Возможно появятся и остальные шифры
Интерфейс вашей программы почти такой же как и мой) сначала подумал что я свой проект открыл)) щас по юзаю вашу версию цезаря)) заранее спасибо за помощь)

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

Подскажите как можно улучшить код на первом посте?

Последний раз редактировалось Stilet; 10.10.2012 в 16:22.
alex.snap вне форума Ответить с цитированием
Старый 09.10.2012, 18:07   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
function Caesar_cipher(str: string; way: integer; skey: string): string;
var
  s: string;
  i, t, key: integer;
begin
  key := strtointdef(skey, 0);//преобразуем строку в ключ - сдвиг
  if key = 0 then//неправильный сдвиг
  begin
    showmessage('Error: wrong key (only key contaning numbers and not equals zero)');
    result := str;
    exit;
  end;
  s := str;//подготавливаем строку для модификации
  if way > 0 then key := -key;//если будет производиться расшифровка, то меняем знак у ключа
  key := key mod lalp;//сдвиг должен быть меньше размера алфавита (выбрасываем лишние обороты по алфавиту)
  for i := 1 to length(str) do//идем по всем символам
  begin
    t := pos(str[i], alp);//находим позицию рассматриваемого символа в алфавите
    if t <> 0 then//если он есть в алфавите
      s[i] := alp[(t - 1 + key + lalp) mod lalp + 1];//самая сложная формула здесь :)
  end;
  result := s;//возвращаем шифрованный (расшифрованный) текст
end;

(t - 1 + key + lalp) mod lalp + 1
t - позиция в алфавите исходной буквы
-1 - из-за mod нужно так сделать (потом делается +1, это как раз одна и та же единица, которая вынесена из-под mod), этот момент не могу сходу объяснить
+key - сдвиг на ключ
+lapl - если t-1 малое число, а key отрицательное и большое, это слагаемое препятствует появлению отрицательных чисел


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

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

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

Если преподаватель требует демонстрации, то можно схитрить.
Выбросить всю кучу проверок, но в голове держать список того, каким ключ не может быть, и не вводить такой ключ
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.10.2012, 18:24   #10
alex.snap
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 14
По умолчанию

Увы, он не на столько глуп) даже в оочень хорошей работе он находит как ему кажется серьезные ошибки. насчет демонстрации без проверки кода увы программа просто не пройдет.
Завтра напишу в тему код который писал на паре, он крайне не точно работает, как и говорил раньше, некоторые буквы он не правильно сдвигает и получается так что все буквы в слове расшифрованы кроме 2-3. этот косяк не смог исправить. Спасибо за помощь
alex.snap вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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