C# 如何使用SHA1散列文件夹
有没有一种方法可以使用SHA1散列一个包含所有内容的文件夹?我可以使用MD5来实现这一点,但我担心MD5会遇到冲突。我正试图建立一个应用程序,检查本地文件,看看他们是否匹配使用散列在线版本 以下是我在MD5中使用的代码:C# 如何使用SHA1散列文件夹,c#,hash,C#,Hash,有没有一种方法可以使用SHA1散列一个包含所有内容的文件夹?我可以使用MD5来实现这一点,但我担心MD5会遇到冲突。我正试图建立一个应用程序,检查本地文件,看看他们是否匹配使用散列在线版本 以下是我在MD5中使用的代码: var path = leftCheckTextbox.Text; var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories) .OrderBy(p
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:是的,我想这取决于用例。如果是这样的话,我想从网上下载一些东西,并确保在我这方面是一样的,那么在网站端压缩和散列是有意义的。如果这些文件来自任意的地方,那么你可能是对的。我觉得这是目前这个问题唯一合理的答案。