Einzelnen Beitrag anzeigen

Benutzerbild von Dano
Dano

Registriert seit: 12. Aug 2004
49 Beiträge
 
#16

AW: 3DES mit DEC (Delphi Encryption Compendium)

  Alt 21. Aug 2011, 18:42
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

Geändert von Dano (21. Aug 2011 um 18:51 Uhr)
  Mit Zitat antworten Zitat