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

如何将Java的SHA-1哈希(Base64编码)方法转换为Delphi实现?

Delphi 实现 Java 风格的 SHA-1 哈希计算方法

Delphi 中没有直接对应 Java MessageDigest 的类,但可以通过 System.Hash 单元中的哈希类实现相同功能,以下是对应你提供的 Java 代码的 Delphi 实现:

核心说明

  • 替代 MessageDigest.getInstance("SHA-1") 的是 THashSHA1(若需 SHA-256 则用 THashSHA256),均位于 System.Hash 单元。
  • TEncoding.UTF8.GetBytes(S) 等价于 Java 的 s.getBytes(StandardCharsets.UTF_8),保证字符串转字节数组的编码一致性。
  • 异常处理逻辑与 Java 保持一致,出错时返回空字符串。

实现代码

基础版本(手动管理哈希对象)

uses
  System.Hash, System.SysUtils; // 引入必要单元

function GetHashCode(const S: string): string;
var
  HashSHA1: THashSHA1;
  HashBytes: TBytes;
begin
  try
    HashSHA1 := THashSHA1.Create;
    try
      // 更新哈希计算的输入数据
      HashSHA1.Update(TEncoding.UTF8.GetBytes(S));
      // 获取最终哈希字节数组
      HashBytes := HashSHA1.HashAsBytes;
      // 调用你已实现的Base64编码方法
      Result := YourBase64EncodeFunction(HashBytes);
    finally
      HashSHA1.Free;
    end;
  except
    Result := '';
  end;
end;

简化版本(使用类方法,Delphi 10.2+ 支持)

如果你的 Delphi 版本较新,可以直接用类方法省略对象创建步骤:

uses
  System.Hash, System.SysUtils;

function GetHashCode(const S: string): string;
var
  HashBytes: TBytes;
begin
  try
    // 直接通过类方法计算哈希字节数组
    HashBytes := THashSHA1.GetHashBytes(TEncoding.UTF8.GetBytes(S));
    Result := YourBase64EncodeFunction(HashBytes);
  except
    Result := '';
  end;
end;

切换到 SHA-256

如果需要替换为 Java 代码中注释的 SHA-256,只需将代码中的 THashSHA1 替换为 THashSHA256 即可,其余逻辑完全一致。

内容的提问来源于stack exchange,提问作者Johan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:15:48