hashAlgorithm 返回 SHA1 。 执行时 bytesToHash 上升 System.ObjectDisposedException 。
let hashAlgorithm : HashAlgorithm =
ConfigurationManager.AppSettings.Item("HashAlgorithm")
|> CryptoConfig.CreateFromName :?> HashAlgorithm
let bytesToHash (bytes : byte[]) =
bytes |>
use hash = hashAlgorithm
hash.ComputeHash
如果我改为
use hash = SHA1.Create()
然后一切正常。
如何更改 bytesToHash 功能以使用使用关键字?
答案 0 :(得分:1)
问题可能是use
阻止的范围。尝试
let bytesToHash (bytes:byte[]) =
use hash = hashAlgorithm
bytes |> hash.ComputeHash
在调用hash
之后处理ComputeHash
值并返回一个值。在您的代码中,hash
在创建包装ComputeHash
的函数值之后但在实际使用字节数组调用之前处理。
另一个问题是你只创建一次哈希算法,但可能会多次处理它,所以我希望除了第一次调用bytestToHash
之外的所有内容都会失败。你可以像这样解决这个问题:
let hashAlgorithm() : HashAlgorithm = ...
let bytesToHash (bytes:byte[]) =
use hash = hashAlgorithm()
bytes |> hash.ComputeHash