2009-12-28 8 views
5

Nếu tôi có một tệp mà tôi muốn theo dõi bất kỳ thay đổi nào (ngoài việc xem các nhãn ngày của tệp, v.v.).Tôi làm cách nào để thực hiện băm SHA1 trên một tệp?

Tôi làm cách nào để thực hiện hàm băm SHA1 trên nội dung của nó?

tôi nghĩ đây là những gì GIT không, vì vậy tôi chỉ muốn tìm hiểu làm thế nào để làm điều đó

+3

Có lý do nào khiến bạn không chỉ sử dụng FileSystemWatcher không? http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx – Will

+2

Bởi vì nó không hoạt động, tất nhiên. Chỉ trên một số hệ thống tệp được hỗ trợ. –

+0

@Will Ngay cả trên các hệ thống tệp được hỗ trợ, nó không được bảo đảm để kích hoạt (kích thước bộ đệm có giới hạn). – vossad01

Trả lời

18
using (FileStream stream = File.OpenRead(@"C:\File.ext")) 
{ 
    using (SHA1Managed sha = new SHA1Managed()) 
    { 
     byte[] checksum = sha.ComputeHash(stream); 
     string sendCheckSum = BitConverter.ToString(checksum) 
      .Replace("-", string.Empty); 
    } 
} 

Tính checksum theo định kỳ.

+0

Đó là một tập tin, anh ta hỏi về một thư mục. – Will

+0

Câu hỏi của anh ta nói "Nếu tôi có một tệp mà tôi muốn theo dõi bất kỳ thay đổi nào", tôi đọc "Tệp", bạn thấy Danh bạ ở đâu? – kd7

+1

Trong tiêu đề. Câu hỏi không rõ ràng. –

0

Đối với ứng dụng cụ thể mà bạn đã mô tả, việc tìm kiếm hàm băm SHA-1 của mỗi tệp trong thư mục và sau đó XOR chúng cùng nhau sẽ hoạt động tốt.

byte[] checksum = new byte[sha1Length]; 
for each file 
    for (int index = 0; index < sha1Length; index++) 
     checksum[index] ^= fileChecksum[index] 

Đã chỉnh sửa thành Thêm: Như đã nêu trong nhận xét, điều này sẽ không thực sự hiệu quả. Một scenerio cụ thể sẽ thêm hai tệp giống hệt nhau, sẽ hủy bỏ lẫn nhau trong XOR. Có lẽ tạo một luồng với tất cả các tên tập tin và dấu thời gian và băm tập tin và sau đó băm sẽ cung cấp cho bạn những gì bạn cần.

Đã chỉnh sửa lại: OK, bây giờ bạn đã thay đổi câu hỏi của mình! Đừng để ý!

+0

xor là không thực sự khuyến khích nếu an ninh là một mối quan tâm (ông không nói nó là, nhưng có lẽ ...). Thay vào đó tôi muốn đề nghị phân loại các tập tin và băm băm. –

+0

@Kevin Montrose - Thật vậy, tôi sẽ chỉnh sửa câu trả lời. –