【发布时间】:2023-10-05 03:09:01
【问题描述】:
我遇到了一个奇怪的问题,我正在使用 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
当我在加密阶段使用此功能时,它可以,但是当我使用相同的密钥解密文件时,输出是垃圾。但是当我在加密阶段硬编码这个密钥时,解密成功。
我错过了什么。我将使用简单的随机数生成器。
【问题讨论】:
-
1) 你为什么使用
AnsiString,而不是array[0..15] of byte? 2)Random糟透了,它肯定不适合任何加密货币的使用。 3)您应该生成所有可能的字节,而不仅仅是 ASCII 数字 4)您需要使用与加密相同的 IV 进行解密。在密文前加上 IV 是标准做法。 -
我正在使用 AnsiString 存储 IV,我无法理解为什么随机生成的相同密钥不起作用,但是当相同的密钥被硬编码在字符串中时它起作用了。
-
我检查了 IV 的值在加密和解密阶段(使用随机生成的代码)和(硬编码的 IV 值)是否相同。那为什么会出现这个问题,我真的很困惑
-
然后发布足够的代码来重现您的问题。虽然您发布的代码糟糕,但它不对您的直接问题负责。
标签: encryption aes pascal initialization-vector