C# 如何使用SHA1散列文件夹

C# 如何使用SHA1散列文件夹,c#,hash,C#,Hash,有没有一种方法可以使用SHA1散列一个包含所有内容的文件夹?我可以使用MD5来实现这一点,但我担心MD5会遇到冲突。我正试图建立一个应用程序,检查本地文件,看看他们是否匹配使用散列在线版本 以下是我在MD5中使用的代码: var path = leftCheckTextbox.Text; var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories) .OrderBy(p

有没有一种方法可以使用SHA1散列一个包含所有内容的文件夹?我可以使用MD5来实现这一点,但我担心MD5会遇到冲突。我正试图建立一个应用程序,检查本地文件,看看他们是否匹配使用散列在线版本

以下是我在MD5中使用的代码:

var path = leftCheckTextbox.Text;
var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
                     .OrderBy(p => p).ToList();

MD5 md5 = MD5.Create();

for (int i = 0; i < files.Count; i++)
{
    string file = files[i];

    string relativePath = file.Substring(path.Length + 1);
    byte[] pathBytes = Encoding.UTF8.GetBytes(relativePath.ToLower());
    md5.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0);

    byte[] contentBytes = File.ReadAllBytes(file);
    if (i == files.Count - 1)
        md5.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
    else
        md5.TransformBlock(contentBytes, 0, contentBytes.Length, contentBytes,0);
}

leftHash = BitConverter.ToString(md5.Hash).Replace("-", "").ToLower();

只需将源代码中的所有MD5更改为SHA1即可。

是否要对整个文件夹使用单个哈希?我不知道是否有一个标准的方法来做这件事,但是你能考虑拉紧所有的东西,然后散列那个文件吗?如果你能用MD5来做这件事,为什么不使用Sh1?你是否想要包括一个元数据?b对象数据c两者?@OliCharlesworth这可能包括独立于压缩对象而改变的元数据,从而使校验和无效。一个简单的重复测试在我的盒子GNU cpio-o上确认了这一点,但是产生了一致的结果checksums@sehe:是的,我想这取决于用例。如果是这样的话,我想从网上下载一些东西,并确保在我这方面是一样的,那么在网站端压缩和散列是有意义的。如果这些文件来自任意的地方,那么你可能是对的。我觉得这是目前这个问题唯一合理的答案。