Danke.
Nach ein bisschen Einarbeitung allgemein in das Thema AES-CBC und
DEC habe ich nun meine Entschlüsselung hingekriegt.
Der Tipp mit
DEC war Gold wert!
Eine kurze Frage noch:
Nach meinem "Datenlieferanten" soll ich die korrekte Entschlüsselung daran erkennen, dass im Output die ersten 2 Byte immer mit $2F2F belegt seinen.
Es kann also nicht sein, dass, wenn ich beim IV oder bei ChipherKey einen "Tippfehler" drin habe, dass dann die ersten 2 Byte auch mit $2F2F belegt sind?
Ich muß z.B. den IV pro "Datenpaket" immer wieder neu erstellen/berechnen.
Was, wenn ich dort einen Fehler drin habe ...?
--Edit:
Das sehe ich jetzt erst! Und ich wundere mich, wieso das Ganze keinen Sinn ergibt^^
Irgend wie scheint die Entschlüsselung doch nicht zu funktionieren.
Die Bytes von 9 bis 16 sind falsch. Der Rest passt.
Falsch:
Zitat:
2F 2F 0C 13 46 00 00 00
0E 60 CF 2D 8E 08 60 CD 21 8C 04 13 46 00 00 00 8D 04 93 13 2C
FB FE 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF BF 0F 03 6F 7D 91 75 C0 BB 43 F2 E3 6C 82 76 29
Korrekt:
Zitat:
2F 2F 0C 13 46 00 00 00
02 6C C3 21 82 04 6C C1 21 8C 04 13 46 00 00 00 8D 04 93 13 2C
FB FE 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF BF 0F 03 6F 7D 91 75 C0 BB 43 F2 E3 6C 82 76 29
Ich habe das mittler weile mit mehreren Daten getestet (unterschl. IV und Keys) und immer an der gleichen Stelle (9-16) stimmen die Daten nicht.
Was kann das sein?
Delphi-Quellcode:
procedure StrToByteArray (AStr:string; var RetBytes:TBytes);
var
nLen,nCount : integer;
sStr, sByte : string;
begin
AStr := StringReplace(AStr,' ' ,'',[rfreplaceAll]);
nLen := Length(AStr);
if nLen mod 2 = 0 then
begin
sStr := AStr;
nLen := nLen div 2;
SetLength(RetBytes, nLen);
nCount := 0;
while sStr<>'' do
begin
sByte := Copy (sStr,1,2);
sStr := Copy (sStr,3, maxint);
RetBytes[nCount] := StrtoInt('$' + sByte);
inc(nCount);
end;
end;
end;
Procedure DoIt();
var
aBytes,aCryptData,aDecyptData : TBytes;
myCipher : TCipher_AES;
CipherKey : RawByteString;
IV : RawByteString;
bein
StrToByteArray('496A85044524010723232323232323',aBytes);
IV := BytesToRawString(aBytes);
StrToByteArray('5A8470C4806F4A87CEF4D5F2D985AB18',aBytes);
CipherKey := BytesToRawString(aBytes);
StrToByteArray('63 82 E1 48 B2 8D AA 7A 59 EE EB F7 E4 29 CA 23 F5 A6 23 E6 8E 89 0A 93 12 0B 2D AA A9 02 63 6C 0F 8E 5C 35 B6 35 D9 E5 49 30 D8 05 BC 2F 6D 3D 09 32 97 ED 08 41 0A 7C 57 14 EB EB 35 76 1F 2B 0D 04 EF CD 76 E9 5A E1 17 C1 3E 67 75 00 00 00',aBytes);
myCipher := TCipher_AES.Create;
try
try
myCipher.Init(CipherKey, IV, $2F);
myCipher.Mode := cmCBCx;
aDecyptData := myCipher.DecodeBytes(aCryptData);
Result := TRUE;
except
//
end;
finally
myCipher.Free;
end;
....
// im aDecyrptData sind Byte 9 - 16 falsch, der rest stimmt