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
相关产品推荐
相关产品推荐

