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

如何在C#或VB.NET中获取32字节长度的SHA256数据输出

问题原因分析
  • SHA256算法的原始计算结果固定为32字节,你代码中result变量本身就是符合要求的32字节哈希值,你觉得结果不对是因为最终返回的是十六进制编码后的字符串,而非原始字节数组。每个字节会被转为2位十六进制字符,因此最终得到的字符串长度为64,对应的字符串本身的存储字节数自然不是32,属于正常逻辑。
  • 你初始化StringBuilder时指定容量为32属于冗余写法,StringBuilder会自动扩容到所需的64字符容量,不会影响结果但可以优化修正。
  • 输入字符串转字节时你使用了UTF32编码,若你需要和其他默认使用UTF8编码的系统做哈希结果对齐,建议将编码改为Encoding.UTF8。
修正方案

场景1:需要获取原始32字节哈希值

public static byte[] sha256_hash_raw(string value)
{
    using (SHA256 hash1 = SHA256.Create())
    {
        Encoding enc = Encoding.UTF8; // 可根据实际需求调整编码
        return hash1.ComputeHash(enc.GetBytes(value));
    }
}

场景2:需要获取十六进制格式的哈希字符串

该场景下得到64位长度的字符串属于正常结果,优化后的代码如下:

public static string sha256_hash_hex(string value)
{
    StringBuilder sb = new StringBuilder(64); // 修正容量为实际需要的64
    using (SHA256 hash1 = SHA256.Create())
    {
        Encoding enc = Encoding.UTF8; // 可根据实际需求调整编码
        byte[] result = hash1.ComputeHash(enc.GetBytes(value));
        foreach (byte b in result)
        {
            sb.Append(b.ToString("x2")); // 直接用小写x2无需再调用ToLower()
        }
    }
    return sb.ToString();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:45:03