我正在研究通过网络传输文件。传输过程中对数据丢失零容忍。我被要求计算原始文件和复制文件的 SHA256 值以验证内容是否相同。到目前为止,我已经根据复制和粘贴文件进行了比较,并让 Windows 重命名文件并在文件名后附加 -copy。我也试过在上面的重命名之后重命名文件,以及删除文件扩展名。到目前为止,它们都产生相同的散列。我还编写了更改文件属性的代码(只是更改了 lastWrittenTime 和 fileCreationTime),这似乎对哈希没有影响。
Checksum result of copying and pasting a file(explorer appends "-copy to name):
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
Checksum result of renaming the -copy in explorer:
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
Checksum result of changing file extension:
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
创建哈希时使用了文件的哪些部分?
好吧,零容忍有点过了,如果哈希值不匹配,文件将不得不重新发送。
最佳答案
整个二进制文件内容通过散列算法流式传输。文件元数据(例如名称、日期等)不起作用。
关于c# - SHA256 使用文件的哪些部分来计算哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19717294/