【发布时间】:2014-11-25 20:42:31
【问题描述】:
好的。在这个论坛上,我的问题的不同方面已经被多次询问和回答。但是,我认为从未有人问过我对这个问题的特殊变体。所以,就这样吧。我试图为同一个文本文件生成两个哈希值,以便在处理之前和处理之后比较数据文件。这个点小脑筋的目的是验证整个文件是否已经被程序读取和处理过。
我已经向自己证明,使用字节和数组将文件分成大块,然后使用 MD5.TransformBlock 将创建一个 has 值(该程序代码遍布整个网络)。而且,当我运行我的程序时,两个哈希值是相同的。但是,我使用 StreamReader 的 readline() 方法一次读取一行文本文件,这会生成不正确的哈希值。
伪代码是:
BufferedStream reader = OpenFile(file)
string initialMd5 = generateMd5FromBufferedStream(reader)
//Start from the beginning again
reader.setposition = 0
reader.DiscardBufferedData();
while((tmpLine = reader.readline()) != null ) {
Byte() buffer = GetBytes(tmpLine);
md5.TransformBlock(buffer, 0, buffer.length, 0)
}
md5.TransformFinal(buffer, 0, 0);
String finalMd5 = ConvertToString(md5.Hash());
有什么想法吗?我对如何解决这个问题的想法已经不多了。
提前致谢!!
【问题讨论】:
-
你为什么要涉及字符串?您应该直接阅读流。
-
也许 readline 正在删除行尾。如何处理带有 0x0(可能最后多次)的字符串?要验证这一点,只需读取一行并将其写入另一个文件 - 这应该会导致两个文件包含相同的内容,对吧? - 然后比较这两个文件,您可能会发现差异。
-
如何计算从输入中读取的字节数?由于 0x0 值,只有直接从输入读取的函数才能正常工作。
-
ReadLine当然不包括行尾,没有“可能”。