1
我面臨一個奇怪的問題,我正在使用aes加密cfb模式。這很好,我用固定的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',而不是'byte [0..15] byte''? 2)'隨機'糟透了,這對於任何加密使用來說都是不合適的。 3)您應該生成所有可能的字節,而不僅僅是ASCII數字4)您需要使用相同的IV來進行用於加密的解密。將IV添加到密文是標準做法。 – CodesInChaos 2013-02-11 10:48:27
我正在使用AnsiString來存儲IV,我無法理解爲什麼同樣的密鑰生成隨機時不工作,但當相同的密鑰硬編碼在它的工作字符串。 – Rahul 2013-02-11 11:09:11
我已經檢查過IV的值在加密和解密階段(使用隨機生成的代碼)和(硬編碼的IV值)相同。那麼爲什麼這個問題,我真的很困惑 – Rahul 2013-02-11 12:51:03