![]() |
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
Delphi-Quellcode:
wäre hier korrekt. Je nach Encoding ist die Länge der Bytes in der Regel kürzer als die vorher berechnete Size. Demnach haben wir hier einen klassischen Buffer-Overrun, wie er bei Pointer-Programmierung leider sehr häufig vorkommt. Damit werden auch unbestimmte Bytes mit in den Hash eingerechnet, die in den TBytes gar nicht vorkommen, sondern zufällig im Speicher dahinter liegen (deshalb auch der Unterschied zwischen der Verwendung von Size und Length(Bytes)). Bei Size ist das Ergebnis daher auch nicht deterministisch.
Length(bytes)
Eine aktuelle Implementierung würde vermutlich gleich auf TBytes aufsetzen und wäre damit auf die Angabe der Puffergröße gar nicht angewiesen. |
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
|
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
Zitat:
Zitat:
|
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
Zitat:
|
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
.. oder weil die Benutzung durch neue Compiler unnötig umständlich ist? Ich habe ja nicht behauptet, daß die bestehenden Methoden durch neue ersetzt werden sollen. Vielmehr hatte ich an overloaded-Versionen für TBytes als Alternative gedacht. So diese denn unter bestimmten Compilern nicht unterstütz werden, kann man die ja durch conditional defines ausblenden. Allerdings habe ich jetzt auch keine Lust, über den Sinn oder Unsinn von alten oder anderen Compilern zu diskutieren. Insofern steht es dir natürlich frei, deine Routinen so zu gestalten wie du es für richtig hältst. |
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
Das in der Bibleothek ein Pointer und die Größe erwartet wird, ist völlig normal. Die Bibleothek soll ja ein möglichst breites Publikum ansprechend und das bedingt verschiedene Comiler und Compilerversionen. Btw. hier nun der entgültige Code, der, soweit ich das im Moment beurteilen kann, auch korrekt läuft.
Delphi-Quellcode:
if (length(trim(ftoHash)) = 0) then exit;
SHA3_512Init(fcontext); fbytes := TEncoding.GetEncoding('UTF-16').GetBytes(fToHash); fSize := TEncoding.GetEncoding('UTF-16').GetByteCount(fToHash); SHA3_512Update(fcontext,@fbytes[0],fsize); SHA3_512Final(fcontext,fdigist); fHash := Base64Str(@fdigist,sizeof(fdigist)); |
AW: SHA-3 von Wolfang Ehrhardt
Zitat:
Delphi-Quellcode:
benutzen.
SHA3_512UpdateXL
|
AW: SHA-3 von Wolfang Ehrhardt
Das ist aber doch unnötig kompliziert, oder? (auch eine Art von Code-Obfuscation)
Delphi-Quellcode:
Warum nicht gleich so?
fbytes := TEncoding.GetEncoding('UTF-16').GetBytes(fToHash);
fSize := TEncoding.GetEncoding('UTF-16').GetByteCount(fToHash);
Delphi-Quellcode:
Oder so?fbytes := TEncoding.GetEncoding('UTF-16').GetBytes(fToHash); fSize := Length(fBytes);
Delphi-Quellcode:
Wobei der ByteCount von Unicode auch wieder nur fbytes := TEncoding.Unicode.GetBytes(fToHash); fSize := Length(fBytes);
Delphi-Quellcode:
ist. TEncoding.Default ist von den aktuellen Windows-Einstellungen abhängig, also eher ungünstig. Etwas sparsamer und trotzdem allgemein gültig wäre da noch UTF8:
CharCount * SizeOf(Char)
Delphi-Quellcode:
Wenn die Hashes auch anderweitig verwendet werden, muss sowieso das Encoding bekannt gemacht werden. Sonst kann niemand was damit anfangen.fbytes := TEncoding.UTF8.GetBytes(fToHash); fSize := Length(fBytes); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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