AGB  ·  Datenschutz  ·  Impressum  







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

DEC 5.2 String hashen?

Ein Thema von a.def · begonnen am 2. Mai 2017 · letzter Beitrag vom 7. Mai 2017
 
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
771 Beiträge
 
Delphi 11 Alexandria
 
#31

AW: DEC 5.2 String hashen?

  Alt 7. Mai 2017, 11:06
Mh Ok ich verstehe. Das heißt Bytes Array ist immer von der Länge her die Hälfte vom Hex.
Ich gucke morgen nochmal rein und gucke, ob ich was ändern kann.

Kann ich dafür TByteStream behalten oder ist TFileStream ein Muss?
Wenn du den in einem Byte gespeicherten Wert im hex System interpretieren und als Zeichenkette speichern willst, dann benötigst du pro Byte 2 Zeichen (aus {0..9,A..B} ).

Wenn du den in einem Byte gespeicherten Wert im binären System interpretieren und als Zeichenkette speichern willst, dann benötigst du pro Byte 8 Zeichen ( aus {0..1} ).


TBytesStream oder TFileStream?
(siehe auch weiter oben)
Du willst mit Daten, welche in einem File enthalten sind arbeiten.
TBytesStream kann Daten aufnehmen, welche als Bytes interpretiert werden. Via LoadFromFile kannst du die Daten aufnehmen, welche in einem File enthalten sind.
TFileStream kann keine Daten aufnehmen, sondern gibt dir nur die Möglichkeit (via read/write/..) auf die Daten eines Files zuzugreifen. (Der Datenspeicher ist also hier quasi deine Festplatte o.ä..)

Da du für die Berechnung von SHA1, MD5 Hashs nicht alle Daten (Filedaten) aufs Mal benötigst, musst du auch nicht alle aufs Mal einlesen.

Nimm wie in den Meldungen weiter oben erwähnt TFileStream. Dann hast du deine Daten auf der Platte und liest jeweils nur soviel Daten ein, wie du gerade benötigst.


Und noch kurz zu der Verwendung von trim(..) in deinem Code.
Wenn du für eine beliebige Datei einen Hash Wert berechnen willst, dann darfst du trim nicht verwenden.

Delphi-Quellcode:
daten : TBytes;
a1 : ansistring;
...
...
a1 := trim( TEncoding.ANSI.GetString( daten ) );
Falls zum Beispiel daten[0] den Wert 32 enthält, dann entspricht dies nach TEncoding.ANSI.GetString dem Leerzeichen und mit trim(..) schneidest du dieses Leerzeichen ab. Wenn du nun über a1 "hashst", dann ermittelst du somit nicht den Hash von daten. [Wenn du TFileStream verwenden wirst und deine exe stückweise einliest (und jeweils die Hash Update Methode aufrufst), dann denk daran: Nicht trimmen .]

Und wenn du's nicht selbst schreiben willst: Du kannst ja 1:1 den weiter oben geposteten Code verwenden fürs Schreiben und Checken des SHA1/MD5 Hashs.

Ich glaube, du hast nun alles, was du benötigst. Ich habe längst fertig .
Michael Gasser
 
 


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 04:24 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