Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SHA-3 von Wolfang Ehrhardt (https://www.delphipraxis.net/194851-sha-3-von-wolfang-ehrhardt.html)

Ghostwalker 16. Jan 2018 08:10

SHA-3 von Wolfang Ehrhardt
 
Moinmoin,

bin etwas verwirrt. Ich wollte, zum sicheren Speichern von Passwörtern in einer DB, die Passwörter Hashen.

Ok,..aktueller Stand dürfte SHA3 sein und fand die Implementierung von Wolfgang Ehrhardt. Hab das ganze auch ohne große Sache integrieren können. Nur funktionieren wills nicht so wirklich. Bei jedem Programmstart bekomme ich, obwohl die Eingangsdaten identisch zu den anderen Aufrufen sind, einen anderen Hash ??

Delphi-Quellcode:
function CreateHash(aString:string):string;
var
  Context : THashContext;
  Digist : TSHA3_512Digest;
  //bytes  : Array of Byte;
  size   : Integer;
  Bytes  : TBytes;

begin
  SHA3_512Init(Context);
  size := aString.Length * SizeOf(Char);
  Bytes := TEncoding.Default.GetBytes(aString);
  SHA3_512Update(Context,@bytes,size);
  SHA3_512Final(Context,Digist);
  result := Base64Str(@Digist,sizeof(Digist));
end;
Dabei ist aString immer PWD+Salz. Aber wie gesagt, bekomme ich bei jedem Start des Programms, einen anderen
Hash, obwohl PWD+Salz immer gleich ist.

Findet ihr hier einen Fehler ?

Danke schonmal :)

TiGü 16. Jan 2018 08:21

AW: SHA-3 von Wolfang Ehrhardt
 
Ich kenne die Biblothek nicht, aber müsste es nicht eher so lauten?

Delphi-Quellcode:
SHA3_512Update(Context,@Bytes, Length(Bytes));

Ghostwalker 16. Jan 2018 08:29

AW: SHA-3 von Wolfang Ehrhardt
 
Zitat:

Zitat von TiGü (Beitrag 1391030)
Ich kenne die Biblothek nicht, aber müsste es nicht eher so lauten?

Delphi-Quellcode:
SHA3_512Update(Context,@Bytes, Length(Bytes));

Hmm...sollte aufs gleiche rauskommen. Habs grad mal geprüft, das verhalten ändert sich nicht.
Bei jedem Programmstart bekomm ich unterschiedliche Hashes.

TiGü 16. Jan 2018 08:44

AW: SHA-3 von Wolfang Ehrhardt
 
Hast du kontrolliert, ob Bytes immer gleich ist?
Vielleicht ergibt sich da schon die Abweichung?

Ghostwalker 16. Jan 2018 09:00

AW: SHA-3 von Wolfang Ehrhardt
 
Die Bytes die rein gehen sind immer die gleichen. Das was raus kommt (digist ist auch ein Byte-Array) ist immer anders.

samso 16. Jan 2018 09:02

AW: SHA-3 von Wolfang Ehrhardt
 
Vielleicht so:

Delphi-Quellcode:
SHA3_512Update(Context,Pointer(bytes),Length(bytes));

Ghostwalker 16. Jan 2018 09:06

AW: SHA-3 von Wolfang Ehrhardt
 
Autsch.....:wall::wall:

das
Delphi-Quellcode:
SHA3_512Update(Context,@bytes,size);
muss
Delphi-Quellcode:
SHA3_512Update(Context,@bytes[0],size);
sein.

Er braucht die Adresse des 1. Bytes im Array, nicht die Adresse der Array-Variable.

Trotzdem Danke :)

gammatester 16. Jan 2018 09:20

AW: SHA-3 von Wolfang Ehrhardt
 
Du bist ein Opfer der Compiler-Magie gewerden. Nach der Deklaration
Delphi-Quellcode:
Bytes : TBytes;
ist Bytes (natürlich?) ein Pointer und mit
Delphi-Quellcode:
@bytes
berechnest Du nicht den Hash von Bytes sondern den Hash des Pointers (und der ändert sich in der Regel, weil ja die Speicheraddresse sich je nach Allokation ändert).

Mit der korrigierten Version
Delphi-Quellcode:
program t_dp_ex;
uses
  system.hash, system.sysutils,
  btypes, mem_util, hash, sha3_512;

{$i std.inc}

{$ifdef APPCONS}
  {$apptype console}
{$endif}

{-----------------------------------------}
function CreateHash(aString:string):string;
var
  Context : THashContext;
  Digist : TSHA3_512Digest;
  //bytes : Array of Byte;
  size : Integer;
  Bytes : TBytes;

begin
  SHA3_512Init(Context);
  size := aString.Length * SizeOf(Char);
  Bytes := TEncoding.Default.GetBytes(aString);
  SHA3_512Update(Context,bytes,size);
  SHA3_512Final(Context,Digist);
  result := Base64Str(@Digist,sizeof(Digist));
end;

begin
  writeln(CreateHash('abc1234'));
end.
Code:
erhalte ich immer das gleiche Ergebnis:
G:\CRC_HASH>t_dp_ex.exe
Zzvn3sQanFpmGDltaWoEMPBRm4tEtBzAP22pOKoe3X1TCY4VN5K8a0cFNWBDOYo8oNInfUYU/tNJWDFf
XXftyA==

G:\CRC_HASH>t_dp_ex.exe
Zzvn3sQanFpmGDltaWoEMPBRm4tEtBzAP22pOKoe3X1TCY4VN5K8a0cFNWBDOYo8oNInfUYU/tNJWDFf
XXftyA==

G:\CRC_HASH>t_dp_ex.exe
Zzvn3sQanFpmGDltaWoEMPBRm4tEtBzAP22pOKoe3X1TCY4VN5K8a0cFNWBDOYo8oNInfUYU/tNJWDFf
XXftyA==
Gruß Gammatester

samso 16. Jan 2018 09:32

AW: SHA-3 von Wolfang Ehrhardt
 
Ich kann weiterhin nicht glauben, dass size=Length(Bytes) gilt. Wieso soll die Länge des Strings nach der Umkodierung die Größe (in Bytes) des Strings vor der Umkodierung sein? Kann mir das jemand erklären?

Edit:
Ah, jetzt ist der Groschen gefallen. Ich dachte, da wird nach Ansi umkodiert. Anscheinen wird aber wohl nur kopiert.

Edit2: Unsinn: Doch, TEncoding.Default.GetBytes wandelt nach Ansi um.

gammatester 16. Jan 2018 09:44

AW: SHA-3 von Wolfang Ehrhardt
 
Zitat:

Zitat von samso (Beitrag 1391048)
Ich kann weiterhin nicht glauben, dass size=Length(Bytes) gilt. Wieso soll die Länge des Strings nach der Umkodierung die Größe (in Bytes) des Strings vor der Umkodierung sein? Kann mir das jemand erklären?

Edit:
Ah, jetzt ist der Groschen gefallen. Ich dachte, da wird nach Ansi umkodiert. Anscheinen wird aber wohl nur kopiert.

Wie auch immer: Falls nicht gewährleistet ist, daß Bytes weniger als 64 K groß ist, sollten das Hashen mit
Delphi-Quellcode:
SHA3_512UpdateXL
durchgeführt werden.

Mit length(Bytes) erhalte ich übrigens auch ein anderes Ergebnis für meinen Teststring.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.
Seite 1 von 2  1 2      

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