AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0

Ein Thema von haentschman · begonnen am 11. Jan 2024 · letzter Beitrag vom 31. Jan 2024
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

Hilfe bei Umstellung Unit DEC5.1 zu DEC6.0

  Alt 11. Jan 2024, 09:52
Hallöle...
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... 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...
PS: Eine Erklärung wäre auch schön.

Danke.
Angehängte Dateien
Dateityp: pas Tools.Crypt.pas (2,3 KB, 20x aufgerufen)

Geändert von haentschman (11. Jan 2024 um 09:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 14. Jan 2024, 13:53
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 15. Jan 2024, 09:20
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.
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
347 Beiträge
 
#4

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

  Alt 15. Jan 2024, 09:43
Hi,
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.
Kas
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 15. Jan 2024, 09:45
@TurboMagic
Dankeschön...keinen Stress.

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...

Geändert von haentschman (15. Jan 2024 um 09:59 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 15. Jan 2024, 21:50
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...
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 15. Jan 2024, 21:50
Yes, that would be good to have!
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 15. Jan 2024, 22:20
@TurboMagic
Dankeschön...keinen Stress.

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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 16. Jan 2024, 07:24
Moin...

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...

Danke für deine Zeit...

Ich melde mich mit dem Ergebnis.


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
Angehängte Dateien
Dateityp: zip Project.zip (4,4 KB, 8x aufgerufen)
Dateityp: zip Source_5.2.zip (527,7 KB, 5x aufgerufen)
Dateityp: zip Source_6.4.1.zip (856,0 KB, 6x aufgerufen)
Dateityp: zip SQL.zip (1.002 Bytes, 6x aufgerufen)
Dateityp: zip Video.zip (1,17 MB, 6x aufgerufen)

Geändert von haentschman (16. Jan 2024 um 11:52 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

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

  Alt 17. Jan 2024, 15:54
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?
Norbert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 07:00 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