Показать сообщение отдельно
  #15  
Старый 25.01.2010, 15:34
km_ km_ вне форума
Прохожий
 
Регистрация: 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, то на место второго блока выводится первый. Как это исправить?
Ответить с цитированием