2013-09-25 71 views
0

有沒有辦法使用SHA1散列文件夾中的所有內容?我能夠使用MD5來做到這一點,但是我擔心MD5會碰到碰撞。我正在嘗試構建一個應用程序來檢查本地文件,以查看它們是否與使用哈希的在線版本匹配。我將如何使用SHA1散列文件夾

這裏是我用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(); 
+0

你想要整個文件夾的單個散列?我不知道是否有標準的方法來做到這一點,但你可以考慮壓縮一切,然後散列單個文件嗎? –

+8

如果你能用MD5做到這一點,爲什麼不用SHA1? – usr

+0

您是否打算包含(a)元數據(哪個?)(b)對象數據(c)? – sehe

回答

9

只要改變所有MD5SHA1在你的源代碼。

+5

我覺得這是問題的唯一明智的答案。 – usr

+0

幾個小時前我做了這個,它工作。 – Pacobart