我有一个对目录进行哈希处理然后压缩/压缩它的应用程序。解压缩目录时,不对任一文件夹进行任何更改,或者在 2 个不同位置解压缩目录两次时,哈希值不匹配。我正在使用 SHA1。有没有办法让哈希值保持不变?MD5能做到这一点吗?
例如:MyZipped.zip。如果我使用 7zip/winRar/WinZip 提取并解压缩此存档两次,然后对它们进行哈希处理,则所有内容都来自同一个 zip,并且应该完全相同。但他们都提出了不同的哈希值。
try
{
var path = ProcessingFolder + @"\" + inputName;
var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
.OrderBy(p => p).ToList();
SHA1 md5 = SHA1.Create();
for (int i = 0; i < files.Count; i++)
{
string file = files[i];
// hash path
string relativePath = file.Substring(path.Length + 1);
byte[] pathBytes = Encoding.UTF8.GetBytes(relativePath.ToLower());
md5.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0);
// hash contents
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);
}
hash = BitConverter.ToString(md5.Hash).Replace("-", "").ToLower();