Folder Hash每次都返回不同的值

时间:2014-10-05 05:35:16

标签: c# hash md5

对于我的应用程序,我使用一个函数来散列整个文件夹。当我在Visual Studio中运行此代码时,它每次为我刚刚创建的文件夹成功返回相同的哈希值。 但是在我创建一个.exe并尝试相同之后,每次运行它都会返回不同的哈希值。我确信文件夹中的文件没有变化。我在下面附加了哈希函数的代码。 为什么会这样?我是新来的,我不确定我是否正确这样做,所以如果我的问题不够明确,我会提前道歉。

    public static string CreateMd5ForFolder(string path)
    {
        // assuming you want to include nested folders
        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];

            // 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);
        }

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

0 个答案:

没有答案