AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SHA-3 von Wolfang Ehrhardt

Ein Thema von Ghostwalker · begonnen am 16. Jan 2018 · letzter Beitrag vom 16. Jan 2018
Antwort Antwort
Seite 1 von 2  1 2   
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 09:10
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
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 09:21
Ich kenne die Biblothek nicht, aber müsste es nicht eher so lauten?

SHA3_512Update(Context,@Bytes, Length(Bytes));
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 09:29
Ich kenne die Biblothek nicht, aber müsste es nicht eher so lauten?

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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 09:44
Hast du kontrolliert, ob Bytes immer gleich ist?
Vielleicht ergibt sich da schon die Abweichung?
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 10:00
Die Bytes die rein gehen sind immer die gleichen. Das was raus kommt (digist ist auch ein Byte-Array) ist immer anders.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#6

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 10:02
Vielleicht so:

SHA3_512Update(Context,Pointer(bytes),Length(bytes));
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 10:06
Autsch.....

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

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

Trotzdem Danke
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#8

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 10:20
Du bist ein Opfer der Compiler-Magie gewerden. Nach der Deklaration Bytes : TBytes; ist Bytes (natürlich?) ein Pointer und mit @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

Geändert von gammatester (16. Jan 2018 um 10:23 Uhr)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#9

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 10:32
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.

Geändert von samso (16. Jan 2018 um 10:56 Uhr) Grund: Allg. Verwirrung
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 10:44
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 SHA3_512UpdateXL durchgeführt werden.

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

Geändert von gammatester (16. Jan 2018 um 10:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:56 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