3

我有一个对目录进行哈希处理然后压缩/压缩它的应用程序。解压缩目录时,不对任一文件夹进行任何更改,或者在 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();
4

0 回答 0