habs gefunden^^
es gibt einen "Initialization vector"
und der wird irgendwie randomm gefüllt wenn ich den nicht mit angebe
habe den jetzt extra auf #0#0#0#0#0#0#0#0 gesetzt und jetzt ist auch der erste block lesbar
Delphi-Quellcode:
implementation
uses DECUtil, DECCipher, DECFmt;
{$R *.dfm}
// CrypTool padding bei CBC mit der anzahl der padding's...
// also z.b. #4#4#4#4 wenn 4 aufgefüllt werden
// Bei CBC wird bei Blockgröße auf/um 8 erweitert...
// input=15byte, output=16... padding #1
// input=16, output=24... padding #8#8#8#8#8#8#8#8
// IV mit 8mal 0 initialisieren, sonst ist erster block müll #0#0#0#0#0#0#0#0
procedure TForm1.Button1Click(Sender: TObject);
var
DefCipherClass: TCipher_2DES;
Temp: String;
begin
DefCipherClass:=TCipher_2DES.Create;
DefCipherClass.Mode:=cmCBCx;
Temp:='AAAAAAAAAAAAAAAA';
DefCipherClass.Init(Temp,#0#0#0#0#0#0#0#0); // passwort und IV setzen
Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
Memo1.Lines.Add(TFormat_HEX.Encode(Temp));
// unsere nachricht + padding damit wir auf blockgröße 8 kommen
Temp:='123456789012345'+#1;
Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
Memo1.Lines.Add(TFormat_HEX.Encode(Temp));
Temp:=DefCipherClass.EncodeBinary(Temp); // verschlüsseln
Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
Memo1.Lines.Add(TFormat_HEX.Encode(Temp));
DefCipherClass.Done; // aufräumen
Temp:=DefCipherClass.DecodeBinary(Temp); // entschlüsseln
Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
Memo1.Lines.Add(TFormat_HEX.Encode(Temp));
// jetzt müßte noch das padding entfernt werden
DefCipherClass.Free;
end;
bin jetzt selber überrascht wie einfach das mit
DEC ging^^
war am anfang schnell überfordert weil in den beispielen soooo viel drin stand und ich nur schwer das für mich benötigte rausfiltern konnt
aber wenn man einmal den durchblick hat, ist das
DEC einfach nur genial
und wenn man noch die ganzen Memo1.Lines.Add weglässt ist es ein 10 zeilen code um mit 3DES zu verschlüsseln und gleich wieder zu entschlüsseln
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
DefCipherClass: TCipher_2DES;
Temp: String;
begin
DefCipherClass:=TCipher_2DES.Create;
DefCipherClass.Mode:=cmCBCx;
DefCipherClass.Init('AAAAAAAAAAAAAAAA',#0#0#0#0#0#0#0#0); // passwort und IV setzen
Temp:='123456789012345'+#1; // text+ padding
Temp:=DefCipherClass.EncodeBinary(Temp); // verschlüsseln
DefCipherClass.Done; // aufräumen
Temp:=DefCipherClass.DecodeBinary(Temp); // entschlüsseln
// jetzt müßte noch das padding entfernt werden
DefCipherClass.Free;
end;
das ist jetzt zu 100% kompatibel zu CrypTool
danke euch für die hilfe
mfg Dano