ich habe diesen code im netz gefunden:
www.indetectables.ne...p;t=3367&p=19330
nach einer anpassung,dass der als key auch ein dynamisches bytearray nimmt, ist Blowfish_ECBEncipherBuf äquivalent zu Form1.DCP_bf.EncryptECB(BFKey,BFKey);
hab dann den c++ code in ein beispiel-projekt übernommen und mit nem key und daten gefüttert und mir das ergebnis ausgeben lassen
in delphi hab ich dann alle möglichen methoden der DCP-Kompo und der der neuen Unit getestet und mir ebenfalls ausgeben lassen
dabei ist mir aufgefallen, dass alle verschiedene ergebniss liefern (eigendlich logisch) und ebn Blowfish_ECBEncipherBuf äquivalent zu Form1.DCP_bf.EncryptECB ist
aber KEINER! gibt mir die gleichen ergebnisse wie der c++ code
also alles debuggt und geguckt, was dem am nächsten kommt:
ergebnis: Blowfish_ECBEncipherBuf
nach der schlüsselgenerierung ist alles identisch zum c++ part
aber die verschlüsselung ist anders:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| procedure Blowfish_ECBEncipherBuf( const Key: String; var Data; DataLen: Integer ); var buf: PChar; bufsize, i: Integer; xxl, xxr: DWORD; bf_P: bf_P_array; bf_S: bf_S_array; begin Blowfish_Initialize( Key, bf_P, bf_S );
bufsize := ( (DataLen + BLOCKSIZE - 1) div BLOCKSIZE ) * BLOCKSIZE; GetMem( buf, bufsize ); try FillChar( buf^, bufsize, 0 ); Move( Data, buf^, DataLen );
i := 0; while i<bufsize do begin Move( (buf+i )^, xxl, BLOCKSIZE div 2 ); Move( (buf+i+BLOCKSIZE div 2)^, xxr, BLOCKSIZE div 2 );
FlipEndian( xxl ); FlipEndian( xxr ); Blowfish_encipher( xxl, xxr, bf_P, bf_S ); FlipEndian( xxl ); FlipEndian( xxr );
Move( xxl, (buf+i )^, BLOCKSIZE div 2 ); Move( xxr, (buf+i+BLOCKSIZE div 2)^, BLOCKSIZE div 2 );
Inc( i, BLOCKSIZE ); end;
Move( buf^, Data, DataLen ) finally FreeMem( buf, bufsize ) end end; |
nach dem ich auch das abgeglichen habe, habe ich den Fehler gefunden: "FlipEndian"!
nachdem ich alle aufrufe dahin entfernt habe, bekam ich das selbe ergebnis!
kann das jemand erklären?