Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0 (https://www.delphipraxis.net/214436-hilfe-bei-umstellung-unit-dec5-1-zu-dec6-0-a.html)

haentschman 11. Jan 2024 08:52


Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...8-)
Ich habe eine Unit die einfach Decrypt/Enrypt macht. (Passwörter etc.) Die verschlüsselte Werte stehen z.B. in der DB.

Da ich mal modernisieren wollte, nehme ich eben mal DEC6.0...:wink: Da ich von der Thematik keine Ahnung habe, brauche ich Hilfe. Die Umstellungen sind zu groß. :?
Bis ValidHash(HashClass).KDFx = undeklariert bin ich gekommen. Dann habe ich aufgegeben.

PS: Die alten Passwörter müssen auch wieder lesbar sein...:wink:
PS: Eine Erklärung wäre auch schön. :wink:

Danke.

haentschman 14. Jan 2024 12:53

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
:cry:

TurboMagic 15. Jan 2024 08:20

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Muss ich mir mal anschauen, heute wird's aber eher nix, eher morgen.
Zuerst muss man die Units ändern, die sind ja umbenannt und teilweise weiter
unterteilt.

Kas Ob. 15. Jan 2024 08:43

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Hi,
Zitat:

Zitat von haentschman (Beitrag 1531864)
:cry:

TurboMagic said will take a look, i hesitated yesterday to write the following:

I can do it even i have never used DEC v5 and have very shallow knowledge with v6, but i believe i can figure it out, BUT i need few things to make sure not wasting my time and yours:

1) the original code, the code was/is working with DEC v5.1, not a modified one.
2) Three handled/hashed data
A) a v5.1 hashed/encrypted password with length less than 7 chars, the password it self is not needed.
B) a v5.1 hashed/encrypted password with length more than 16 chars, the password it self is not needed.
C) a v5.1 password with hashed/encrypted form, the length preferably less than 7.
D) repeat the above in English chars only, also one more with copy of A,B and C with Unicode chars or some exotic characters if your application allow it.

These are important for every one (specially you) to make sure the new code is compatible and will not break you DB.

haentschman 15. Jan 2024 08:45

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
@TurboMagic
Dankeschön...keinen Stress. 8-)

Vieleicht hast auch dann mal 5 Minuten Zeit, mir das "Grundprinzip" (Was brauche ich wofür...für die Zukunft) zu erkären.

Danke...

Nachtrag:
Ich stelle die Daten mal zusammen...

TurboMagic 15. Jan 2024 20:50

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Hast du auch schon mal in den DOCS Unterordner geschaut?
Da ist eine Doku drin... ;-) Ich glaub' sogar einigermaßen umfangreich,
was für ein Open Source Projekt nicht unbedingt üblich ist... ;-)

TurboMagic 15. Jan 2024 20:50

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Yes, that would be good to have!

TurboMagic 15. Jan 2024 21:20

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Zitat:

Zitat von haentschman (Beitrag 1531897)
@TurboMagic
Dankeschön...keinen Stress. 8-)

Vieleicht hast auch dann mal 5 Minuten Zeit, mir das "Grundprinzip" (Was brauche ich wofür...für die Zukunft) zu erkären.

Danke...

Nachtrag:
Ich stelle die Daten mal zusammen...

Hier mal was ungetestetes, aber es compiliert:

Delphi-Quellcode:
unit Tools.Crypt;

interface

uses
  System.SysUtils,
  DECUtil, DECHash,
  //DECCipher, DECFmt;
  DECHashBase, DECCipherBase, DECCiphers, DECFormatBase, DECFormat,
  DECHashAuthentication, DECRandom;

const
  conKey = 'aYr14iaz8u)xO7Ok';

var
  CipherMode: TCipherMode = cmCBCx;
  HashClass: TDECHashClass = THash_SHA256;
  TextFormat: TDECFormatClass = TFormat_MIME64;
  KDFIndex: LongWord = 1;

type
  TToolsCrypt = class
  public
    class function Decrypt(aHash: string; aKey: string = ''): string;
    class function Encrypt(aText: string; aKey: string = ''): string;
  end;

implementation

{ TToolsCrypt }

class function TToolsCrypt.Decrypt(aHash, aKey: string): string;
var
  Cipher: TCipher_Rijndael;
  Salt: RawByteString; //Binary;
  Data: RawByteString;
  Check: RawByteString;
  Pass: RawByteString;
  PassBytes: TBytes;
  Len: Integer;
begin
  if aKey = '' then
  begin
    aKey := conKey;
  end;

  Cipher := TCipher_Rijndael.Create;
  try
    Salt := ValidFormat(TextFormat).Decode(RawByteString(aHash));
    Len := Length(Salt) - 16 - Cipher.Context.BufferSize;
    Data := Copy(Salt, 17, Len);
    Check := Copy(Salt, Len + 17, Cipher.Context.BufferSize);
    SetLength(Salt, 16);
    PassBytes := TDECHashAuthentication(ValidHash(HashClass)).KDFx(aKey[1],
                                                                   Length(aKey) * 2,
                                                                   Salt[1],
                                                                   Length(Salt),
                                                                   Cipher.Context.KeySize,
                                                                   KDFIndex);
    SetLength(Pass, Length(PassBytes));
    Move(PassBytes[0], Pass[low(Pass)], Length(PassBytes));

    Cipher.Mode := CipherMode;
    Cipher.Init(Pass);
    SetLength(Result, Len div 2);
    Cipher.Decode(Data[1], Result[1], Len);
    if Check <> Cipher.CalcMAC then
    begin
      Result := '';
    end;
  finally
    Cipher.Free;
    //ProtectBinary(Salt);
    ProtectString(Salt);
    ProtectString(Data);
    ProtectString(Check);
    ProtectString(Pass);
  end;
end;

class function TToolsCrypt.Encrypt(aText, aKey: string): string;
var
  Cipher: TCipher_Rijndael;
  SaltBytes : TBytes;
  Salt: RawByteString; //Binary;
  Data: RawByteString; //Binary;
  Pass: RawByteString; //Binary;
  PassBytes: TBytes;
begin
  if aKey = '' then
  begin
    aKey := conKey;
  end;

  Cipher := TCipher_Rijndael.Create;
  try
    SaltBytes := RandomBytes(16); //RandomBinary(16);
    SetLength(Salt, Length(SaltBytes));
    Move(SaltBytes[0], Salt[low(Salt)], Length(SaltBytes));

    PassBytes := TDECHashAuthentication(ValidHash(HashClass)).KDFx(aKey[1],
                                                                   Length(aKey) * 2,
                                                                   Salt[1],
                                                                   Length(Salt),
                                                                   Cipher.Context.KeySize,
                                                                   KDFIndex);
    SetLength(Pass, Length(PassBytes));
    Move(PassBytes[0], Pass[low(Pass)], Length(PassBytes));

    Cipher.Mode := CipherMode;
    Cipher.Init(Pass);
    SetLength(Data, Length(aText) * 2);
    Cipher.Encode(aText[1], Data[1], Length(Data));
    Result := string(ValidFormat(TextFormat).Encode(Salt + Data + Cipher.CalcMAC));
  finally
    Cipher.Free;
    ProtectString(Salt);
    ProtectString(Data);
    ProtectString(Pass);
  end;
end;

end.
  1. Units wurden sprechender benannt
  2. Es wurden Units aufgesplittet, daher sind weitere einzubinden
  3. Der in DEC definierte Datentyp Binary, ein Alias zu AnsiString, wurde entfernt
  4. DEC nutzt heutzutage lieber TBytes oder teilweise RawByteString
  5. Der obige Code basiert auf meiner aktuellen Entwicklungsversion, sollte aber auch mit dem aktuellen Release 6.4.1 kompatibel sein

DU erwänst oben DEC 6.0. Meinst du wirklich 6.0 oder eine neuere? Falls 6.0 warum nutzt du diese und nicht eine neuere?

Grüße
TurboMagic

haentschman 16. Jan 2024 06:24

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Liste der Anhänge anzeigen (Anzahl: 5)
Moin...8-)

Zitat:

Zitat von TurboMagic (Beitrag 1531956)
Meinst du wirklich 6.0

...ich meinte den Wechsel von 5 auf 6. Ich habe auch 5.2 statt 5.1 im alten Code. Das neue DEC im QT ist die letzte Version aus dem GitHub...:wink:

Danke für deine Zeit...:cheer::kiss:

Ich melde mich mit dem Ergebnis. :wink:


Rückmeldung:
Zugriffsverletzung im "TDECHashAuthentication" (Video)

Anbei:
1. Project für Crypt/Decrypt
2. Source 5.2
3. Source 6.4.1
4. Muster SQL normal/Crypt

EdAdvokat 17. Jan 2024 14:54

AW: Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
 
Wie es aussieht gibt es in diesem Thread nichts Neues - oder doch? Hat sich TurboMagic mal wieder dazu gemeldet?

Ich habe auch versucht das Projekt zum laufen zu bringen und komme erwartungsgemäß ebenfalls nur bis zur Exception Accsess Violation, wie im Video anschaulich dargestellt.
Meine bescheidenen Debuggig-Versuche erbrachten kein brauchbares Eregnis.
Also wohl Ergebnislosigkeit in dieser Sache KDF.

@haentschman: Welche Werte speicherst Du in der DB?
verwendest Du die Schlüssel für ein symetrisches Chiffrierverfahren oder für andere Zwecke?

In meinem KeyGenerations-Programm erstelle ich aus einem Master-Key diverse Key-Ableitungen, die ich dann nummerisch sortiert speichere. Dazu nutze ich HAMAC und
wahlweise auch BCrypt-Algos.
Somit wäre es möglich, dass ausgehend von einem Master-Key, der den Kommunikationspartnern bekannt ist, diese wiederum Key-Ableitungen vornehmen und speichern.
So könnte dann beispielsweise mit der 5. Key-Ableitung eine AES-Chiffrierung vorgenommen werden.
Diese Key-Liste ist natürlich besonders schützenswert und daher als Ganzes ebenfalls zu sichern.
Welche Erfahrungen hast Du praktisch mit der Key-Ableitung (KDF) gemacht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 4  1 23     Letzte »    

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