AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SHA-3 von Wolfang Ehrhardt

Ein Thema von Ghostwalker · begonnen am 16. Jan 2018 · letzter Beitrag vom 16. Jan 2018
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#11

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 11:09
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?
Du hast vollkommen Recht: Length(bytes) 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.

Eine aktuelle Implementierung würde vermutlich gleich auf TBytes aufsetzen und wäre damit auf die Angabe der Puffergröße gar nicht angewiesen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
gammatester

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

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 11:25
Eine aktuelle Implementierung würde vermutlich gleich auf TBytes aufsetzen und wäre damit auf die Angabe der Puffergröße gar nicht angewiesen.
Ich sehe nicht wie das mit BP7 oder VP21 kompatibel sein soll. Außerdem habe ich keine Lust und Zeit, für alle möglichen Eingabetypen separate Funktionen zu schreiben. Im übrigen ist die Form Init/Update/Final mit Pointern ziemlich verbreitet bei Hash-Implementationen (wahrscheinlich durch C beeinflußt).
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#13

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 11:43
Ich sehe nicht wie das mit BP7 oder VP21 kompatibel sein soll.
Soll es ja auch gar nicht.

Außerdem habe ich keine Lust und Zeit, für alle möglichen Eingabetypen separate Funktionen zu schreiben.
Das ist ja auch dein gutes Recht.

Im übrigen ist die Form Init/Update/Final mit Pointern ziemlich verbreitet bei Hash-Implementationen (wahrscheinlich durch C beeinflußt).
Eine weite Verbreitung ist aber nicht wirklich ein Qualitätsmerkmal. Der oben angesprochene Fehler ist doch ein ziemlich eindeutiges Indiz.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
gammatester

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

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 12:10
Ich sehe nicht wie das mit BP7 oder VP21 kompatibel sein soll.
Soll es ja auch gar nicht.
Aber sicher soll es das. Die meisten direkten Rückmeldungen und Optimierunsvorschläge erhalte ich übrigens für VP21, Delphi3 und TP6(!) Vielleicht auch bedingt dadurch, daß die Funktionen praktisch für alle Kompiler nutzbar sind.
Im übrigen ist die Form Init/Update/Final mit Pointern ziemlich verbreitet bei Hash-Implementationen (wahrscheinlich durch C beeinflußt).
Eine weite Verbreitung ist aber nicht wirklich ein Qualitätsmerkmal. Der oben angesprochene Fehler ist doch ein ziemlich eindeutiges Indiz.
Der oben angesprochene Fehler ist mM ein Resultat der undurchsichtigen Kompiler-Magie: wenn man nicht verschleiern würde das TBytes kein Array sondern ein Pointer auf ein Array ist, wäre der Fehler offensichtlich.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#15

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 12:22
Aber sicher soll es das. Die meisten direkten Rückmeldungen und Optimierunsvorschläge erhalte ich übrigens für VP21, Delphi3 und TP6(!) Vielleicht auch bedingt dadurch, daß die Funktionen praktisch für alle Kompiler nutzbar sind.[/QUOTE]

.. 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ghostwalker

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

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 12:24
Der oben angesprochene Fehler ist doch ein ziemlich eindeutiges Indiz.
Der Fehler hat eher was mit Wäldern und Bäumen zu tun, als mit irgend etwas anderem

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));
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
gammatester

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

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 12:30
Btw. hier nun der entgültige Code, der, soweit ich das im Moment beurteilen kann, auch korrekt läuft.
Wie schon gesagt: Sicherheitshalber solltest Du SHA3_512UpdateXL benutzen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#18

AW: SHA-3 von Wolfang Ehrhardt

  Alt 16. Jan 2018, 13:01
Das ist aber doch unnötig kompliziert, oder? (auch eine Art von Code-Obfuscation)
Delphi-Quellcode:
  fbytes := TEncoding.GetEncoding('UTF-16').GetBytes(fToHash);
  fSize := TEncoding.GetEncoding('UTF-16').GetByteCount(fToHash);
Warum nicht gleich so?
Delphi-Quellcode:
  
  fbytes := TEncoding.GetEncoding('UTF-16').GetBytes(fToHash);
  fSize := Length(fBytes);
Oder so?
Delphi-Quellcode:
  
  fbytes := TEncoding.Unicode.GetBytes(fToHash);
  fSize := Length(fBytes);
Wobei der ByteCount von Unicode auch wieder nur CharCount * SizeOf(Char) 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:
Delphi-Quellcode:
  
  fbytes := TEncoding.UTF8.GetBytes(fToHash);
  fSize := Length(fBytes);
Wenn die Hashes auch anderweitig verwendet werden, muss sowieso das Encoding bekannt gemacht werden. Sonst kann niemand was damit anfangen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 18:28 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