You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:48:11