Разные результаты шифрования AES

Пишу программу, которая шифрует текст AES'ом. На форме три компонента Memo c текстом (открытым, зашифрованным, расшифрованным). Не знаю проблема это или нет, но первые несколько шифрований получается разный зашифрованный текст. Спустя 5-10 раз, он принимает одинаковый вид на всех итерациях.
Вот то, что выдаёт Мемо зашифрованного текста.
Ї?HЏ=РУ9јЪoBЅхАP
т”#u„ЁЩќ¶ё¤aB 
eжјф!лSAEѓR‰¬р
іѓnЄу/§юа:6oR%X
іѓnЄу/§юа:6oR%X
Sжыувчђ5n)Гњ‡rШ
іѓnЄу/§юа:6oR%X
іѓnЄу/§юа:6oR%X
іѓnЄу/§юа:6oR%X


А вот собственно код кнопки, что выполняет все эти операции.
//Ñ÷èòûâàåì äëèíó êëþ÷à è óêàçûâàåì Nk è Nr
case ListBox1.ItemIndex of
  0:begin Nk:=4;Nr:=10; end;
  1:begin Nk:=6;Nr:=12; end;
  2:begin Nk:=8;Nr:=14; end;
  end;

//Ñ÷èòûâàåì êëþ÷
s:=KText.Text;
for i:=1 to Nk*4 do
  key[i]:=Ord(s[i]);

//Ðàñøèðåíèå êëþ÷à
keys:=KeyExpansion(key,Nk);

//Èíèöèàëèçàöèÿ âõîäà
s:=MText.Lines[0];
for i:=1 to 16 do open[i]:=Ord(s[i]);

//Øèôðîâàíèå
close:=Cipher(open,keys,Nr);

s:='';for i:=1 to 16 do s:=s+Char(close[i]);
CText.Lines.Add(s);

//Ðàñøèôðîâàíèå
case ListBox2.ItemIndex of
  0:decrypted:=InvCipher(close,keys,Nr);
  1:decrypted:=EqInvCipher(close,keys,Nr);
  end;

s:='';for i:=1 to 16 do s:=s+Char(decrypted[i]);
PText.Lines.Add(s);

p.s. в функциях KeyExpansion и Cipher никаких рандомных значений или функций не используется.
  • Вопрос задан
  • 2669 просмотров
Пригласить эксперта
Ответы на вопрос 1
@M_PRO
Очевидно, это проблема. Такого поведения быть не должно.
Скорее всего в какой-то из функций Вы используете не инициализированную переменную.
Если судить по Вашему описанию, текст расшифровывается корректно. Значит дело в функции KeyExpansion или инициализации массива ключа. Попробуйте вставить что-то типа

for Index := Low(Key) to Hi(Key) do
    Key[Index] := 0;


перед строчками

for i:=1 to Nk*4 do
  key[i]:=Ord(s[i]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы