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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2007, 03:19   #1
tuxx32
Новичок
Джуниор
 
Регистрация: 09.11.2007
Сообщений: 2
Сообщение [Алгоритм] Симметричного шифрования

Помогите пожалуйста реализовать алгоритм зашифрования и расшифрования произвольного сообщения, составленного из символов выбранного алфавита методом "Шифрования перестановкой символов в блоках сообщения". По возможности на С++.

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

Пример.
Открытый текст: "ШИФРОВАНИЕ_ПЕРЕСТАНОВКОЙ".
Ключ (правило перестановки): группы из 5 букв "ШИФРО|ВАНИЕ|_ПЕРЕ|СТАНО|ВКОЙ_" с порядковыми номерами 1,2,3,4,5 переставить в порядок 4-1-2-5-3.
Шифрованный текст: "РШИЩФ|ИВАЕН|Р_ПЕЕ|НСТОА|ЙВК_О" .
tuxx32 вне форума Ответить с цитированием
Старый 09.11.2007, 10:22   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Если совсем просто, то:
Каждая пятерка изначально - строка, например
Код:
mystr:='ШИФРО';
Каждая буква в строке -
Код:
mystr[1]:='Ш';
mystr[2]:='И';
mystr[3]:='Ф';
mystr[4]:='Р';
mystr[5]:='О';
Осталось "перепутать" индексы в соответствии с ключом
Код:
newstr:=mystr[4]+mystr[1]+mystr[2]+mystr[5]+mystr[3];
Все это легко организуется через циклы.
Читаем, думаем, надеемся на себя, получаем правильный результат и удовольствие от содеянного.
mihali4 вне форума Ответить с цитированием
Старый 09.11.2007, 10:46   #3
tuxx32
Новичок
Джуниор
 
Регистрация: 09.11.2007
Сообщений: 2
По умолчанию

mihali4, мм спсб, сейчас попробую что-нибудь набросать..
tuxx32 вне форума Ответить с цитированием
Старый 13.05.2010, 08:27   #4
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

не стал создавать новую тему, раз такая уже имеется
вот код для реализации семмитричного шифрования, всё вродебы хорошо но почему то во время выполнения программы вылазиет ошибка"is not a valid integer value"
подскажите как с этим бороться, ошибка судя по всему возникает, при выполнение первого цикла.
Цитата:
var k,i,j,z:integer;
key: array [1..100000] of integer;
strmas: array [1..10000] of string;
st,strkey,str:string;
begin
edit3.Text:='';
j:=1;
k:=1;
str:=edit1.Text;
strkey:=edit2.Text;
z:=length(str);
repeat
st:=copy(strkey,j,1);
key[k]:=strtoint(st);
j:=j+2;
k:=k+1;
until j<Z;
repeat
z:=length(str);
if (z mod (k-1)) <> 0 then str:=str+' ';
until (z mod (k-1))<>0;
strmas[i]:=copy(str,1,k-1);
for i:=1 to (k-1) do strmas[i]:=copy(str,i*(k-1),k-1);
for i:=1 to (k-1) do
begin
strmas[i]:=strmas[key[i]];
edit3.Text:=edit3.Text+strmas[i];
end;
nolz вне форума Ответить с цитированием
Старый 13.05.2010, 08:45   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
key[k]:=strtoint(st);
А вдруг в st не число?
Лучше так:
Код:
 var e:integer;
 ...
 val(st,key[k],e);
 if e<>0 then Ошибка st это не число
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2010, 09:02   #6
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

Stilet, спасибо, ошибка исчезла, но теперь в edit3 вообще текст не появляется
nolz вне форума Ответить с цитированием
Старый 13.05.2010, 09:39   #7
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var   k,e,i,z:integer;
  key: array [1..100000] of integer;
  kodmas,strmas: array [1..10000] of string;
  st,strkey,str:string;
begin
   edit3.Text:='';
   str:=edit1.Text;
   strkey:=edit2.Text;
   z:=length(str);
   e:=length(strkey);
   for i:=1 to e do key[i]:=strtoint(copy(strkey,i,1));  // предпологается что числа вводяться без пробелов
   while (z mod e)<>0 do
    begin
     str:=str+' ';
     z:=length(str);
    end;


  strmas[1]:=copy(str,1,e);

  for i:=2 to z div e do strmas[i]:=copy(str,i*e,e);
  for i:=1 to z div e do
     begin
        k:=key[i];
        kodmas[i]:=strmas[k];
        edit3.Text:=edit3.Text+strmas[i];
     end;
end;
подправил код, когда цифры в ключе идут по порядку(12345 например) то текст выводиться в edit3, иначе там не появляется вообще нечего
nolz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм шифрования Диффи-Хеллмана! Kaifolom Помощь студентам 3 09.08.2013 06:37
Очень срочно! Алгоритм шифрования DES... Regloger Помощь студентам 15 14.05.2013 17:04
Алгоритм шифрования Simply-Art Общие вопросы Delphi 14 01.02.2008 14:30
работа с текстом (алгоритм шифрования) GAGARIN-NEW Компоненты Delphi 7 18.10.2007 09:48