Einzelnen Beitrag anzeigen

magoo2002de

Registriert seit: 26. Mär 2003
60 Beiträge
 
Delphi 2005 Personal
 
#26

Re: Rijndael-Entschlüsselung

  Alt 11. Aug 2009, 17:53
@ Novo: das müsste so gehen
Delphi-Quellcode:
procedure RSDFSaveFiles(AItems: TStrings; const AFileName: String);
const
  Password = #$8C#$35#$19#$2D#$96#$4D#$C3#$18#$2C#$6F#$84#$F3#$25#$22#$39#$EB#$4A#$32#$0D#$25#$00#$00#$00#$00;
var
  I: Integer;
begin
  with TCipher_Rijndael.Create do
  try
    Mode := cmCFB8;
    Init(Password);
    for I := 0 to AItems.Count -1 do
      AItems[I] := 'CCF: '+EncodeBinary(AItems[I], TFormat_MIME64);
  finally
    Free;
  end;
  AItems.Text := TFormat_HEX.Encode(AItems.Text);
  AItems.SaveToFile(AFileName);
end;
Mich würde nun interessieren, wie man das mit DCPCrypt2 umsetzt. Ich habe es wie folgt probiert, jdeoch leider ohne Erfolg:
Delphi-Quellcode:
function HexToStr(s: String): String;
var
  i: Integer;
begin
  Result:=''; i:=1;
  while i<Length(s) do begin
    Result:=Result+Chr(StrToIntDef('$'+Copy(s,i,2),0));
    Inc(i,2);
  end;
end;

function PadWithZeros(const str : string; size : integer) : string;
var
  origsize, i : integer;
begin
  Result := str;
  origsize := Length(Result);
  if ((origsize mod size) <> 0) or (origsize = 0) then
  begin
    SetLength(Result,((origsize div size)+1)*size);
    for i := origsize+1 to Length(Result) do
      Result[i] := #0;
  end;
end;

procedure TMainForm.LoadRSDF(Filename: String);
var
  I1:Integer;
  tmpLst1: TStringList;
  tmpStr1, RSDFKey, RSDFIV: String;
  Cipher : TDCP_rijndael;
begin
  RSDFKey := PadWithZeros('8C35192D964DC3182C6F84F3252239EB4A320D25', 32);
  RSDFIV := PadWithZeros('', 16);
  tmpLst1 := TStringList.Create;
  tmpLst1.LoadFromFile(Filename);
  tmpLst1.Text := HexToStr(tmpLst1.Text);
  for I1 := 0 to tmpLst1.Count - 1 do
  begin
    tmpStr1 := Base64DecodeStr(tmpLst1.Strings[I1]);
    Cipher := TDCP_rijndael.Create(Self);
    Cipher.Init(RSDFKey[1],128,@RSDFIV[1]);
    Cipher.DecryptCFB8bit(tmpStr1[1],tmpStr1[1],Length(tmpStr1));
    Cipher.Free;
    tmpLst1.Strings[I1] := tmpStr1;
  end;
  Memo1.Text := tmpLst1.Text;
  tmpLst1.Free;
end;
  Mit Zitat antworten Zitat