1

我面临一个奇怪的问题,我正在使用 cfb 模式的 aes 加密。进展顺利,我已经用固定 IV 测试了加密。但是当我使用随机 IV 时,问题就出现了。我去详细说。

function Random16DigitsString: AnsiString;
var
  i: Integer; c0: byte;
begin
  Randomize;
  c0:=ord('0');
  SetLength(Result, 16);
  Result[1] := char(c0+Random(9)+1);
  for i:=2 to 16 do Result[i] := char(c0+Random(10));
end;   

上述代码的示例输出为 8229343736510872

当我在加密阶段使用此功能时,它可以,但是当我使用相同的密钥解密文件时,输出是垃圾。但是当我在加密阶段硬编码这个密钥时,解密成功。

我错过了什么。我将使用简单的随机数生成器。

4

1 回答 1

0

我正在使用 AnsiString 来存储上下文的密钥。这是真正的问题,因为在帕斯卡 AnsiString 不是单字节。当@CodeInChaos 专注于 AnsiString 时,我检查并找到了它。所以我换了

Key: AnsiString  

Key : Array [0..32] of Char;

它成功地工作了。

谢谢@CodeInChaos。

于 2013-02-12T10:02:47.253 回答