Bei einem aktuellen Projekt benötige ich SHA512. Ich verwende nun
diese Komponente, habe mir aber für meine Zwecke eine kleine
Unit zusammengeschrieben, die nur das enthält, was ich auch wirklich benötige.
Nun zu dem Problem:
Folgender Code stammt im Prinzip aus der FileHash Demo, ich habe ihn nur gekürzt...
Delphi-Quellcode:
function SHA512(s:string):string;
var DCP_sha512: TDCP_sha512;
HashDigest: array of byte;
i,read:integer;
buffer: array[0..16383] of byte;
strmInput: TFileStream;
begin
DCP_sha512:=TDCP_sha512.Create(Form1);
DCP_sha512.Init;
strmInput:=TFileStream.Create('C:\Users\User\Desktop\Neues Textdokument.txt',fmOpenRead);
repeat
read := strmInput.Read(buffer,Sizeof(buffer));
DCP_sha512.Update(buffer,read);
until read <> Sizeof(buffer);
strmInput.Free;
SetLength(HashDigest,DCP_sha512.HashSize div 8);
DCP_sha512.Final(HashDigest[0]);
Result:='';
for i:=0 to Length(HashDigest)-1 do
Result:=Result+IntToHex(HashDigest[i],2);
end;
Funktioniert soweit auch ganz gut, lädt halt den Inhalt der angegebenen TXT-Datei und hasht diesen und gibt am Ende den Hash HEX-codiert zurück.
Wie man allerdings erkennen kann, ist mein Ziel eigentlich, einen string zu hashen. Und da kommen die Probleme ^^
1. DCP_sha512.Update(s,Length(s)) funktioniert nur bei leerem String, ansonsten ergibt das bei jedem Ausführen wieder etwas anderes
2. Den string mit den
hier beschriebenen Methoden in einen Stream zu schreiben und so zu übergeben - was zwar eine sehr hässliche Lösung wäre - funktioniert ebenfalls nicht richtig und führt zum selben Ergebnis wie 1.
Hierzu sei noch gesagt: Der Fehler muss in diesem Code stecken, ich habe zum Test nochmals die Original Units geholt und damit getestet - es passierte das gleiche...
MfG Z4ppy