我目前面临一个问题,即必须对文件进行哈希处理,这会导致内存压力过大,我正在尝试找出我们是否可以使用文件流动态创建哈希。
在研究可能性时,我决定编写一个快速的小测试,并确保 MD5 的 ComputeHash 在采用字符串和流的方法调用之间返回相同的哈希值。
let CreateMD5HashFromString (value: string) =
Convert.ToBase64String(MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(value)))
let CreateMD5HashFromStream (value: Stream) =
Convert.ToBase64String(MD5.Create().ComputeHash(value))
我正在使用以下单元测试来测试调用:
[<TestMethod>]
member this.``CreateMD5Hash is the same between a string and a file stream`` () =
let sampleText = File.ReadAllText("Sample.txt")
let textMD5 = Security.CreateMD5HashFromString(sampleText);
let streamMD5 = Security.CreateMD5HashFromStream(File.OpenRead("Sample.txt"))
Assert.AreEqual(textMD5, streamMD5)
它正在读取一个用于测试的小样本文件。此测试失败,因为生成的哈希值不同。对我来说,这似乎是不正确的,但并不完全确定。有谁知道这些是否应该相同?
另外,第二个问题,我是通过使用 ComputeHash 的流重载来节省自己的内存问题,还是在散列之前加载整个流?我试图分解相关的 .NET 程序集,但在试图追踪 HashCore 的幕后工作时迷失了方向。