如何在Delphi 7中使用lib.SHA3库生成SHA3-512哈希?
在Delphi 7中使用lib.SHA3库生成SHA3-512哈希的正确方法
你的代码存在重复输入数据、未获取最终哈希结果的问题,以下是修正后的完整实现:
procedure TForm1.Button1Click(Sender: TObject); var Hasher: TSHA3_512Hash; Hash: TSHA3_512; Input: string; HashStr: string; I: Integer; begin Input := 'Hello, world!'; Hasher := TSHA3_512Hash.Create; try // 初始化哈希计算器 Hasher.Init; // 方式1:传入字符串的ANSI原始字节(Delphi7的string为ANSI编码) Hasher.Update(Input[1], Length(Input)); // 方式2:直接调用HashString传入字符串,内部已处理字节转换,二选一即可 // Hasher.HashString(Input); // 获取最终哈希结果字节数组 Hash := Hasher.Final; // 将字节数组转换为十六进制字符串 HashStr := ''; for I := 0 to High(Hash) do HashStr := HashStr + IntToHex(Hash[I], 2); // 显示最终哈希值 ShowMessage('SHA3-512哈希结果:'#13#10 + HashStr); finally Hasher.Free; end; end;
关键注意点:
- 不要重复输入数据:
Update和HashString都是向哈希计算器传入数据的方法,同时调用会导致计算出错误的哈希值,二选一即可。 - 必须调用Final:
Final方法会完成哈希计算流程并返回最终的64字节哈希数组,这一步是获取结果的核心,不能省略。 - 字节长度适配:Delphi7中
string是ANSI类型,每个字符占1字节,直接用Length(Input)作为字节数即可,无需额外乘以SizeOf(Char)。 - 结果格式化:SHA3-512的哈希是512位(64字节)的二进制数据,需要转换为十六进制字符串才能直观显示,循环逐个字节转换拼接即可。
内容的提问来源于stack exchange,提问作者Leonardo Souza
相关产品推荐
相关产品推荐

