Du bist ein Opfer der Compiler-Magie gewerden. Nach der Deklaration
Bytes : TBytes;
ist Bytes (natürlich?) ein Pointer und mit
@bytes
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).
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:
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==
Gruß Gammatester