25.01.2010, 15:34
|
Прохожий
|
|
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
|
|
Практически сделал ECB.
Вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var str, str1,s, block:string; i, j, t, kol, a, b:integer;
input:array[1..100] of string; state:array[1..100, 1..100] of string;
begin
str:=edit1.text;
kol:=length(str);
t:=0; j:=0; a:=0; b:=1;
while kol>0 do
begin
kol:=kol-16;
t:=t+1;
end;
for i:=1 to t do
begin
str1:=copy(str, 1, 16);
delete(str, 1, 16);
while str1<>'' do
begin
j:=j+1;
s:=copy(str1, 1, 1);
delete(str1, 1, 1);
input[j]:=s;
end;
for j:=1 to 16 do
begin
if input[j]='' then input[j]:='0';
block:=block+input[j];
end;
for j:=1 to 16 do
begin
a:=a+1;
state[a, b]:=input[j];
if a=4 then
begin
a:=0;
b:=b+1;
end;
end;
block:='';
for a:=1 to 4 do
for b:=1 to 4 do
block:=block+state[a,b];
memo1.Lines.Add(block);
j:=0;
end;
end;
Но одна проблема: если мы вводим строку длиной не больше 16 символов, то все шифруется нормально, а если больше 16, например 20, то на место второго блока выводится первый. Как это исправить?
|