使用 F#,我試圖撰寫一個函式來計算任何給定字串的 SHA256 哈希值。當我將我的函式生成的哈希值與這個網站(https://xorbin.com/tools/sha256-hash-calculator)中的哈希值進行比較時,我的哈希值的長度總是小于64。經過仔細檢查,我發現我的哈希值省略了一些0值。我懷疑我對字串的編碼方式有問題,但我不確定。對于造成這個問題的原因以及如何解決這個問題有什么想法嗎?
這里是函式:
open System.Security.Cryptographyopen System.Text
let calculateHash (inputString: string) =
Encoding.UTF8.GetBytes(inputString)
|> (new SHA256Managed()).ComputeHash。
|> Seq.iter (printf "%x"/span>)
printfn "">。
例如,這里是字串 "Test "的哈希值:
。該網站生成:
532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25
我的函式生成:
532eaabd957488dbf76b9b8cc0832c20a6ec113d68229955d7a6ef345e25
uj5u.com熱心網友回復:
問題不在于你的計算,而在于你的列印。
你正在迭代單個位元組并使用printf "%x"來列印它們。這將位元組列印為十六進制值,但對于小于16的數字,這只是一個單一的字符 - 所以,如果你printf "%x" 10,這導致只有a - 你需要用空格填充它,得到0a。
要做到這一點,你可以將格式字串改為x,其中0和2表示用零填充,總長度為2個字符:
let calculateHash (inputString: string) =
Encoding.UTF8.GetBytes(inputString)
|> (new SHA256Managed()).ComputeHash。
|> Seq.iter (printf "x"/span>)
printfn "">。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322810.html
標籤:
上一篇:將JSON轉換為完整的表格
下一篇:在f#中使用自定義函式相交
