![]() |
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:
Dabei ist aString immer PWD+Salz. Aber wie gesagt, bekomme ich bei jedem Start des Programms, einen anderen
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; Hash, obwohl PWD+Salz immer gleich ist. Findet ihr hier einen Fehler ? Danke schonmal :) |
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));
|
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
Bei jedem Programmstart bekomm ich unterschiedliche Hashes. |
AW: SHA-3 von Wolfang Ehrhardt
Hast du kontrolliert, ob Bytes immer gleich ist?
Vielleicht ergibt sich da schon die Abweichung? |
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.
|
AW: SHA-3 von Wolfang Ehrhardt
Vielleicht so:
Delphi-Quellcode:
SHA3_512Update(Context,Pointer(bytes),Length(bytes));
|
AW: SHA-3 von Wolfang Ehrhardt
Autsch.....:wall::wall:
das
Delphi-Quellcode:
muss
SHA3_512Update(Context,@bytes,size);
Delphi-Quellcode:
sein.
SHA3_512Update(Context,@bytes[0],size);
Er braucht die Adresse des 1. Bytes im Array, nicht die Adresse der Array-Variable. Trotzdem Danke :) |
AW: SHA-3 von Wolfang Ehrhardt
Du bist ein Opfer der Compiler-Magie gewerden. Nach der Deklaration
Delphi-Quellcode:
ist Bytes (natürlich?) ein Pointer und mit
Bytes : TBytes;
Delphi-Quellcode:
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).
@bytes
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:
Gruß Gammatester
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== |
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. |
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
Delphi-Quellcode:
durchgeführt werden.
SHA3_512UpdateXL
Mit length(Bytes) erhalte ich übrigens auch ein anderes Ergebnis für meinen Teststring. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz