Шифровка/дешифровка

16.12.2013
5
0
#1
здравствуйте.не знаю как сделать дешифровку. у меня сделана шифровка. не могли бы вы помочь с дешифровкой и если не сложно добавить комментарии. И возможно ли вывести зашифрованый и дешифрованый текст таблицей как в примере?

вот исходная задача.
Простая перестановка. Выбирается размер блока шифрования в n столбцов и m строк и ключевая последовательность, которая формируется из натурального ряда чисел 1,2,...,n случайной перестановкой.
Шифрование проводится в следующем порядке:
Шифруемый текст записывается последовательными строками под числами ключевой последовательности, образуя блок шифрования размером n*m.
Зашифрованный текст выписывается колонками в порядке возрастания номеров колонок, задаваемых ключевой последовательностью.
Заполняется новый блок и т.д.
Например, зашифруем текст
ГРУЗИТЕ_АПЕЛЬСИНЫ_БОЧКАХ
блоком размером 8*3 и ключом 5-8-1-3-7-4-6-2.
Таблица простой перестановки будет иметь вид:
Ключ
5 8 1 3 7 4 6 2
Г Р У З И Т Е _
А П Е Л Ь С И Н
Ы _ Б О Ч К А Х
Зашифрованное сообщение:
УЕБ_НХЗЛОЕСЛГАЫЕИАИЬЧРП_
Расшифрование выполняется в следующем порядке:
Из зашифрованного текста выделяется блок символов размером n*m.
Этот блок разбивается на n групп по m символов.
Символы записываются в те столбцы таблицы перестановки, номера которых совпадают с номерами групп в блоке. Расшифрованный текст читается по строкам таблицы перестановки.
Выделяется новый блок символов и т.д.

Код:
program lab1;
uses crt;
var
i, M: longint;
n, o, oo: byte;
R, T: string;
Const
S: string = 'грузите_апельсины_бочках';
K: longint = 58137462;
Begin
i:=k;
while i<>0 do
begin
inc(n);
i:=i div 10;
end;
M:=0;
For o:=1 to n do
Begin
i:=k;
For oo:=1 to n do
Begin
if i mod 10 = o then M:=(M+oo)*10;
i:=i div 10;
End;
End;
M:=M div 10;
R:='';
For o:=1 to n do
Begin
oo:=n-(M mod 10)+1;
T:='';
while oo<=length(S) do
Begin
T:=T+S[oo];
oo:=oo+n;
End;
M:=M div 10;
R:=T+R;
End;
Writeln;
Writeln('Зашифровать:');
Writeln('kei: 58137462');
Writeln('Исходный код: ',S);
Writeln('Зашифрованый текст:',R);
Writeln;
Writeln('Дешифровать:');
Writeln('kei: 58137462');
Writeln('Зашифрованый текст: ' );
Writeln('Дешифрованный текст:' );
End.