Einzelnen Beitrag anzeigen

OTS

Registriert seit: 2. Jun 2010
2 Beiträge
 
Delphi 2010 Enterprise
 
#20

Re: Eure Anregungen für das DEC 5.3 gebraucht

  Alt 2. Jun 2010, 11:20
Hallo Leute,

Erst mal vielen Dank für die tolle Arbeit an DEC. Ich nutze die Komponente schon lange und würde sie gerne weiter einsetzten.
Ich weiß nicht ob das hier die richtige Stelle ist, aber ich hab da mal ne Frage zu einer Portierung von D2007 -> D2010.
Ich habe bis D2007 die DEC Version 3.0 eingesetzt und bin mit der Portierung auf D2010 auf die DEC Version 5.2 umgestiegen. Ich habe nun ein Problem bei der Dekodierung von Dateien die mit der 3.0 Version Blowfish-Verschlüsselt wurden. Die letzten Bytes einer DEC 5.2 Verschlüsselung unterscheiden sich von der DEC 3.0 Verschlüsselung. Ich habe das Problem auf die folgenden Stellen im Quellcode zurückgeführt:

Delphi-Quellcode:
  procedure EncodeCTSx(S,D: PByteArray; Size: Integer);
  var
    I: Integer;
  begin
    Dec(Size, FBufferSize);
    I := 0;
    while I <= Size do
    begin
      XORBuffers(S[I], FFeedback[0], FBufferSize, D[I]);
      DoEncode(@D[I], @D[I], FBufferSize);
      XORBuffers(D[I], FFeedback[0], FBufferSize, FFeedback[0]);
      Inc(I, FBufferSize);
     end;
     Dec(Size, I - FBufferSize);
     if Size > 0 then
     begin // padding
       //EncodeCFS8(@S[I], @D[I], Size); -------original code
          MyEncodeCFS8(@S[I], @D[I], Size); //my modification
          FState := csPadded;
     end else FState := csEncode;
  end;

procedure EncodeCFS8(S,D: PByteArray; Size: Integer);
  // CFS-8, CTS as CFB
  var
    I: Integer;
  begin
    I := 0;
    while I < Size do
    begin
      DoEncode(FFeedback, FBuffer, FBufferSize);
      D[I] := S[I] xor FBuffer[0];
      Move(FFeedback[1], FFeedback[0], FBufferSize -1);
      FFeedback[FBufferSize -1] := FFeedback[FBufferSize -1] xor D[I];
      Inc(I);
    end;
    FState := csEncode;
  end;



procedure MyEncodeCFS8(S,D: PByteArray; Size: Integer);
   begin
    Move(FFeedback[0], FBuffer[0], FBufferSize);
    DoEncode(FBuffer,FBuffer,FBufferSize);
    XORBuffers(S[0], FBuffer[0], Size, D[0]);
    XORBuffers(FBuffer[0], FFeedback[0], FBufferSize, FFeedback[0]);
    FState := csEncode;
  end;
Ich habe DEC 3.0 und DEC 5.2 verglichen und mit der Modifikation "MyEncodeCFS8" funktioniert es wieder.
Mein Problem ist das ich nicht wirklich verstehe warum das so ist.

Kann mir da jemand weiter helfen?

Gruß

Malcolm
  Mit Zitat antworten Zitat