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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2009, 12:42   #1
ddj
 
Регистрация: 16.04.2009
Сообщений: 3
Восклицание Алгоритм шифрования "перестановка с ключом"

Привет всем!
Нужна помощь в решении одной вроде бы несложной задачки, если кто может помочь, буду весьма благодарен.

Суть алгоритма:

1. Есть исходное сообщение и ключ, по которому его шифруем.
2. Далее сообщение забивается в некую матрицу, длина строки которой равна длине ключа
2. Ключ нужно упорядочить по алфавиту (можно просто упорядочить по возрастанию номера символов ключа через ord)
3. Одновременно переставляются столбцы матрицы, которые соответствуют каждому символу ключа.

Проиллюстрируем:

| к | л | ю | ч ++++++| к | л | ч | ю
--------------+++++++--------------
| с | о | о | б ++++++ |с | о | б | о
--------------+++=>++--------------
| щ | е | н | и ++++++|щ | е | и | н
-------------- ++++++ -------------
| е |___|__|__++++++ |е |
-------------- ++++++

т.е. был ключ "ключ", его упорядочили, он стал "клчю"
был шифруемый текст "сообщение", стал "собощеине"

Нужен алгоритм шифрования/дешифрования на Delphi

P. S. Ну очень надо!!! Вы же сами когда-то были студентами!!!

Последний раз редактировалось ddj; 16.04.2009 в 13:20.
ddj вне форума Ответить с цитированием
Старый 16.04.2009, 13:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что именно не получается? Разбивка на матрицу или сортировка?

P.S. а как назад такое расшифровать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.04.2009, 13:34   #3
ddj
 
Регистрация: 16.04.2009
Сообщений: 3
По умолчанию

Сортирвать ключ я смог, а вот как переставить в соответствии с этим символы сообщения, что-то не соображу. Может, есть мысли или решение готовое?

"а как назад такое расшифровать?" - если б я знал...
ddj вне форума Ответить с цитированием
Старый 16.04.2009, 14:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если б я знал...
Ха!. Красавчик
Вот пример на скорую руку:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type             TCrtfoxGrid=class(Grids.TCustomGrid);
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
     procedure SortGrid(grid:TStringGrid;column:integer=0;fromrow:integer=0);

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var key,mess:string;i,rw,cl:integer;
begin
 key:='ключ';
 mess:='Сообщение';
 StringGrid1.ColCount:=length(key)+1;
 for i:=1 to length(key) do
  StringGrid1.Cells[i-1,0]:=key[i];
 rw:=1;cl:=0;
 for i:=1 to length(mess) do begin
  StringGrid1.Cells[cl,rw]:=mess[i];
  if cl=length(key)-1 then cl:=0 else inc(cl);
  if cl=0 then inc(rw);
 end;
end;
 
//**************************************************************************
procedure SortGrid;
var k,i:integer;
begin
 for i:=fromrow+1 to grid.RowCount-1 do begin
   for k:=fromrow+1 to grid.RowCount-1 do begin
    if grid.Cells[k,column]<grid.Cells[k-1,column] then
      TCrtfoxGrid(grid).MoveColumn(k,k-1);
   end;
 end;
end;
//**************************************************************************

procedure TForm1.Button1Click(Sender: TObject);
begin
 SortGrid(StringGrid1,0,0);
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.04.2009, 14:53   #5
ddj
 
Регистрация: 16.04.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ха!. Красавчик
Вот пример на скорую руку:
.....
На гридах работает прикольно, спасибо за пример.

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

Я никак не соображу, как это все до ума довести... Работает только сортировка ключа, вот она:

Код:
function Sort (key: String): String;
var i, lenKey: Integer;
    temp : String;
begin
  temp := key;
  LenKey:= Length(Key);
  for i:= 1 to LenKey do
   if Ord(Key[i]) > Ord(Key[i+1]) then
    begin
      temp[i] := Key[i];
      Key[i] := Key[i+1];
      Key[i+1] := temp[i];
    end;
    Result := Key;
end;
А как быть дальше, вот в чем баааальшой вопрос. Может, для кого-то это все элементарно, если да, поделитесь опытом, что ли...
ddj вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм шифрования Andryan00 Общие вопросы Delphi 1 21.05.2016 21:01
Алгоритм шифрования AES Adex Помощь студентам 0 18.12.2012 21:17
Алгоритм шифрования Alt Помощь студентам 2 18.03.2011 07:26
[Алгоритм] Симметричного шифрования tuxx32 Помощь студентам 6 13.05.2010 09:39
Алгоритм шифрования Simply-Art Общие вопросы Delphi 14 01.02.2008 14:30