AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?
Thema durchsuchen
Ansicht
Themen-Optionen

Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

Ein Thema von ULIK · begonnen am 12. Dez 2008 · letzter Beitrag vom 17. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#1

Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 12. Dez 2008, 15:36
Hallo,

im Zuge der Umstellung eines Projekts auf Delphi 2009 muß ich auch die DEC Library aktualisieren. Bisher wurde die Version 3 verwendet. Nur wie stellt man das korrekt auf die Version 5 um? Teilweise fehlen ja Funktionalitäten (oder ich finde sie nicht mehr):
  • Durch was kann man THash_CRC32 ersetzen?
  • Wie müßte man Result := THash_MD5.CalcString(strText, TMAC.Create(strPassword, nil), fmtHEX) umschreiben?
  • Wie ersetzt man den folgenden Code:
    Delphi-Quellcode:
    with TCipher_Blowfish.Create(strPassword, nil) do
       try
         strResultV3 := CodeString(EncodeString(strText), paEncode, fmtMIME64);
       finally
         Free;
       end;
    Mein Versuch ihn mit
    Delphi-Quellcode:
    with TCipher_Blowfish.Create do
      try
        Init(strPassword);
        strResultV5 := EncodeBinary(strText, TFormat_MIME64);
      finally
        Free;
      end;
    zu ersetzen liefert leider falsche Ergebnisse:
    • strText := 'This is a confidential text'
    • strPassword := 'Password';
    • V3: strResultV3 = TzWGKC6P5greUpxUgBnQaTFJtUVQhPbIk83N
    • V5: strResultV5 = ggrgAZoMYbij5DbW6DKMynShnjmsxRsUnYtQ
    Auch das Entschlüsseln mit Cipher_BlowFish liefert mir immer falsche Werte. Bisher
    DecodeBinary(strText, DEC5_DECFmt.TFormat_MIME64) , nun durch DecodeString(CodeString(strText, paDecode, fmtMIME64)) ersetzt. Genau diese Funktionalität zum Entschlüsseln bestehender mit V3 verschlüsselter Daten benötige ich aber unbedingt.

Bin für jede Hilfe dankbar!

Grüße,
Uli
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 13:17
Zumindest für den ersten Punkt bin ich etwas schlauer: CRC Unit (hab die komplett übersehen )
Aber auch hier hab ich nun das Problem, daß irgendwie nichts so recht zusammenpassen will: Wie muß ich denn den folgenden code übersetzen, daß da identischen Werte rauskommen?:
Hash.THash_CRC32.CalcString(strText, TMAC.Create(strPassword, nil), fmtHEX); oder auch nur die einfachere Variante
Hash.THash_CRC32.CalcString(strText, nil, fmtHEX); Meine Versuche mit
strResultV5 := IntToHex(CRC.CRCCalc(CRC_32, buffer, Length(strText)), 4); liefern immer verschiedene Werte.

Ich bräuchte hier dringend eine Lösung. Alternative: welche Bibliothek ausser DEC kann man sonst verwenden und wie müßte man sie konfigurieren um die gewünschten Werte zu erhalten. Problem ist halt: ich hab nicht wirklich eine Ahnung von Verschlüsselung und muß ein Projekt auf Delphi 2009 umstellen

Grüße,
Uli
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#3

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 13:28
Hi,

die DEC 3 und DEC 5.x unterscheiden sich in vielen Punkten. Wir hatten kürzlich ziemlich genau das gleiche Thema hier:
http://www.delphipraxis.net/internal...=ciphermanager

Wahrscheinlich stimmen auch die Datentypen nicht mehr, z.B. ein (Ansi)String in D7-D2007 soll das gleiche wie ein UnicodeString in D2009 ergeben. Das kann dann nicht gut gehen.

Probier es doch mal mit AnsiStrings aus, dann wirst Du schon beim CRC etc die gleichen Werte erhalten.

Für UnicodeStrings mußt Du entsprechend an Binärdaten arbeiten, wobei Length(Text) * SizeOf(Text[1]) dann als Länge übergeben würde.

In Deinem Fall also z.B.

Delphi-Quellcode:
var
  StrPassword, StrResultV5, StrText: AnsiString
Dann geht es erstmal mit Ansi. Aber Du wirst Ansi-Werte niemals = Unicode-Werte bekommen (das hat auch nichts mit DEC 3 <> DEC 5 zu tun).

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 13:37
Ich hab das Problem auch schon in Delphi2007, da ich nun erst mal auf die DEC5.2 umstellen wollte und dann weiter auf Delphi 2009.

Grüße,
Uli
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 14:04
Hi Uli,

dann sag mal bitte genau, was Du machen möchtest.

Möchtest Du etwas verschlüsseln, einen Hash errechnen, Text konvertieren oder eine Prüfsumme berechnen (CRC)? Welches Eingabeformat, welches Ausgabeformat (z.B. Text, Binär, MIME64).

Die DEC Funktionen selbst arbeiten einwandfrei, ich habe Testcases gegen alle Encodings, Cipher und Hashes gefahren als ich die DEC 5.1 auf D2009 portiert habe...

Also her mit den Vorgaben und etwas mehr Kontext zu dem Problem

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 14:32
Hi,

Dann mal los:

1) Hashwerte berechnen für einen Couponcode: (Wert wird dann mit einer Liste von gespeicherten verglichen und wenn dort gefunden, dann ist der Coupon gültig; Problem ist, daß die Coupons schon im Umlauf sind, also nicht einfach neu erstellt werden können)
Der bisherige Code mit DEC3 war:
strCoupon := Hash.THash_CRC32.CalcString(strText, TMAC.Create(strPassword, nil), fmtHEX); wobei strText und strPassword Ansi-Strings sind. Da ich das Programm selbst zwingen kann, hier weiter mit ANSI Strings für strText und strPassword zu arbeiten, bräuchte ich nun eine Variante von DEC5, die mir für gegebene Wert den gleichen Wert liefert wie die bestehende DEC3 Variante.

2) Weiter hab ich das Problem, daß es Daten gibt, die bisher mit BlowFish/Mime64 verschluesselt wurde. Diese Daten muß ich nun wieder mit DEC 5 entschlüsseln können (Erst mal mit Delphi 2007, dann aber auch mit Delphi 2009). Dazu hab ich nun den folgenden DEC 5 code verwendet:
Delphi-Quellcode:
  with DECCipher.TCipher_Blowfish.Create do
  try
    Init(strPassword);
    strResultV5 := EncodeBinary(strText, DEC5_DECFmt.TFormat_MIME64);
  finally
    Free;
  end;
leider liefert dieser nun für einen mit DEC 3 und
Delphi-Quellcode:
   with Cipher.TCipher_Blowfish.Create(strPassword, nil) do
   try
     strResultV3 := DecodeString(CodeString(strText, paDecode, fmtMIME64));
   finally
     Free;
   end;
verschlüsselten Text nicht wieder den Originaltext. Auch hier das Problem: die verschlüsselten Daten sind im Umlauf und können nicht so einfach durch neue ersetzt werden.


Danke,
Uli
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#7

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 19:13
Hi,

Zitat von ULIK:
Ich hab das Problem auch schon in Delphi2007, da ich nun erst mal auf die DEC5.2 umstellen wollte und dann weiter auf Delphi 2009.
Du kannst gerne mal das alte DEC 5.1 (von Michaels Seite) ausprobieren, aber ich hatte alle Hashes/Cipher von 5.1 zu 5.2 geprüft.

Ich selbst arbeite nicht mit der "alten" DEC 3. Was sich da wo geändert hat, weiß ich nicht und da kann ich Dir leider nicht wirklich weiterhelfen...

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 20:22
Hi,

werd ich morgen früh gleich mal ausprobieren. Aber auf alle Fälle schon mal vielen Dank für deine Hilfe!


Grüße,
ULi
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#9

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 15. Dez 2008, 21:08
Hi Uli,

Zitat von ULIK:
werd ich morgen früh gleich mal ausprobieren. Aber auf alle Fälle schon mal vielen Dank für deine Hilfe!
Bitte gerne, keine Ursache! Tut mir nur leid, daß ich die DEC3 nicht so richtig kenne, sonst hätt ich bestimmt besser helfen können.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Umstellung DEC 3 auf DEC5.2: fehlende Funktionalität?

  Alt 16. Dez 2008, 15:13
So, wieder etwas schlauer geworden:

Der DEC 3 Variante
Hash.THash_CRC32.CalcString(FText, TMAC.Create(FPassword, nil), fmtHEX); entspricht im DEC 5 der folgende Code:
Delphi-Quellcode:
var
  // DEC5_xyz entspricht der unit xyz aus DEC 5 (hab sie nur umbenannt)
  strResultV3: ANSIString;
  strResultV5: ANSIString;
  cResult: Cardinal;
  objCRCDef: DEC5_CRC.TCRCDef;
  strKey: ANSIString;
  cVector: Cardinal;
begin
  // DEC 3 Variante:
  // strResultV3 := Hash.THash_CRC32.CalcString(FText, TMAC.Create(FPassword, nil), fmtHEX);

  // BEGIN TMAC5.Create(...) Entsprechung
  // neuen Startwert berechnen
  cVector := $FFFFFFFF;
  DEC5_CRC.CRCSetup(objCRCDef, $04C11DB7, 32, $FFFFFFFF, $FFFFFFFF, True);
  DEC5_CRC.CRCCode(objCRCDef, PAnsiCHar(FPassword)^, Length(FPassword));
  cResult := DEC5_CRC.CRCDone(objCRCDef);
  strKey := DEC5_DECFmt.TFormat_Copy.Encode(cResult, 4);
  DEC5_DECUtil.XORBuffers(cVector, PAnsiChar(strKey)^, Length(strKey), cVector);

  // Damit CRC wieder initialisieren
  FillChar(objCRCDef, SizeOf(objCRCDef), #0);
  DEC5_CRC.CRCSetup(objCRCDef, $04C11DB7, 32, $FFFFFFFF, $FFFFFFFF, True);
  objCRCDef.CRC := cVector;
  // END TMAC5.Create(...) Entsprechung

  // und damit den Hash-Wert nun entgueltig berechnen
  cResult := DEC5_CRC.CRCCode(objCRCDef, PAnsiCHar(FText)^, Length(FText));
  cResult := DEC5_CRC.CRCDone(objCRCDef);

  strResultV5 := DEC5_DECFmt.TFormat_HEX.Encode(cResult, 4);

  // CheckEqualsString(strResultV3, strResultV5);
end;
Beide DEC Varianten liefern damit den identischen Hashwert. Damit ist der erste meiner Punkte schon mal gelöst!

Grüße,
Uli
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz