Tôi cần tính tổng kiểm tra các tệp khá lớn (gigabyte). Điều này có thể được thực hiện bằng cách sử dụng phương pháp sau:Có thể tính giá trị băm MD5 (hoặc khác) với số lần đọc đệm không?
private byte[] calcHash(string file)
{
System.Security.Cryptography.HashAlgorithm ha = System.Security.Cryptography.MD5.Create();
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] hash = ha.ComputeHash(fs);
fs.Close();
return hash;
}
Tuy nhiên, các tệp này thường được viết ngay lập tức theo cách đệm (viết 32MB mỗi lần). Tôi rất thuyết phục rằng tôi đã thấy một sự ghi đè của hàm băm cho phép tôi tính giá trị băm MD5 (hoặc khác) cùng lúc bằng cách viết, tức là: tính toán giá trị băm của một bộ đệm, sau đó cho băm kết quả đó vào lần lặp tiếp theo .
Cái gì đó như thế này: (giả-ish)
byte [] hash = new byte [] { 0,0,0,0,0,0,0,0 };
while(!eof)
{
buffer = readFromSourceFile();
writefile(buffer);
hash = calchash(buffer, hash);
}
băm bây giờ sililar những gì sẽ được thực hiện bằng cách chạy chức năng calcHash trên toàn bộ tập tin.
Bây giờ, tôi không thể tìm thấy bất kỳ phần ghi đè nào như vậy trong Khung 3.5., Tôi có đang mơ không? Nó chưa bao giờ tồn tại, hay tôi chỉ lousy khi tìm kiếm? Lý do để làm cả việc viết và kiểm tra tính toán cùng một lúc là bởi vì nó có ý nghĩa do các tệp lớn.
omg, chỉ cần đăng cùng một đề xuất, sử dụng cùng một định dạng =) –
Ok, nhưng +1 cũng cung cấp tham chiếu! –
Ay caramba! Nó đây rồi! Đó là chức năng tôi đang tìm kiếm. Thật tốt khi biết tôi đã không làm tất cả. Cảm ơn Guffa và Rubens đã cung cấp câu trả lời đúng như vậy ngay lập tức. 1 cho cả hai, tôi sẽ chấp nhận câu trả lời này vì ví dụ mã được bao gồm. –