【问题标题】:file copy that won't change file hash不会更改文件哈希的文件副本
【发布时间】:2012-06-28 13:59:43
【问题描述】:

我无法复制文件,然后验证文件的完整性。我已经尝试了所有我能想到的文件复制方法(File.Copy、filestreams、尝试进行二进制复制),但是复制后文件哈希总是不同的。我一直在四处寻找,我注意到很多人说从网络共享复制文件会导致这种情况,但我从共享中获得的结果与直接从硬盘驱动器中获得的结果相同。

//File hashing method:
private byte[] hashFile(string file)
{
    try
    {
        byte[] sourceFile = ASCIIEncoding.ASCII.GetBytes(file);
        byte[] hash = new MD5CryptoServiceProvider().ComputeHash(sourceFile);
        return hash;
...

使用这种方法,原始文件和复制文件在每次运行时总是(单独)产生相同的哈希值,但两个哈希值不相同。有谁知道在不更改文件哈希的情况下复制文件的方法?

【问题讨论】:

  • 你检查过ByteArrays有什么不同吗?小/大字节序问题?
  • 您似乎在对文件名进行哈希处理,而不是对文件的内容进行哈希处理。

标签: c# file hash copy


【解决方案1】:

我认为您正在散列 FileName .. 而不是 Content!

所以肯定它不会计算一样!

检查文件和字节[]源文件的值和长度

【讨论】:

    【解决方案2】:

    您似乎将文件名而不是文件内容传递给哈希函数。

    使用这样的东西:

    byte[] hash = md5.ComputeHash(File.ReadAllBytes(filename));
    

    或者这个:

    using (var stream = File.Open(filename)) {
        byte[] hash = md5.ComputeHash(stream);
    }
    

    【讨论】:

    • 回答哪个更好?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2013-12-05
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多