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

F#使用SHA256Managed计算字符串SHA256哈希时输出丢失0值如何解决

问题成因

你遇到的问题和字符串编码环节无关,核心原因是字节转十六进制字符串的格式化逻辑错误。
SHA256的计算结果为32个字节,每个字节对应2位十六进制字符,标准输出应为固定64位长度。你使用的%x格式化符号在处理数值小于0x10(即十进制16)的字节时,会自动省略前导的0,例如字节值0x0d用%x输出仅为d,而非标准的0d,这就直接导致最终拼接的哈希字符串长度不足。

修复方案

只需将迭代输出时的格式化符号从%x替换为%02x即可。%02x的含义是输出十六进制字符时固定占2位,位数不足时用前导0补齐,完全符合哈希值的标准输出规则。

修复后的代码如下:

open System.Security.Cryptography
open System.Text

let calculateHash (inputString: string) =
    Encoding.UTF8.GetBytes(inputString)
    |> (new SHA256Managed()).ComputeHash
    |> Seq.iter (printf "%02x")

    printfn ""

修改后对字符串Test计算得到的哈希值就会和标准工具的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:57:03