2013-04-08 29 views
7

Tôi đã viết một hàm lấy URL của một tệp làm tham số và trả về giá trị băm MD5 của tệp đó.Hàm trả về MD5 khác nhau mỗi lần

Hàm băm được tạo bởi hàm này (trong môi trường phát triển) khớp với băm được tạo bởi công cụ của bên thứ ba cho cùng một tệp.

Nhưng khi điều này được triển khai trong môi trường QA của khách hàng của tôi, hàm này trả về các giá trị khác nhau mỗi lần hàm được gọi.

Tôi đã thực hiện một số thao tác trên Google và nhận thấy rằng vấn đề có thể là do nhà phát triển. máy chủ là 64bit và máy chủ QA là 32bit. Vì tôi không có quyền truy cập vào máy chủ của khách hàng của tôi, tôi triển khai nó trong một máy chủ 32bit và thấy rằng các hash phù hợp ngay cả trong một máy chủ 32bit (chức năng hoạt động như mong đợi?).

Tôi cũng đã xem this question.

đây là chức năng tôi đã viết:

public static String GetMD5HashFromFile(String url) 
{ 
    String response = String.Empty; 
    HttpWebRequest aRequest = (HttpWebRequest)WebRequest.Create(url); 
    using (HttpWebResponse aResponse = (HttpWebResponse)aRequest.GetResponse()) 
    { 
     MD5 md5 = new MD5CryptoServiceProvider(); 
     byte[] retVal = md5.ComputeHash(aResponse.GetResponseStream()); 
     response = "MD5:" + BitConverter.ToString(retVal).Replace("-", string.Empty); 
    } 
    return response; 
} 

Câu hỏi của tôi là; những gì có thể là lý do cho chức năng này để trả lại các giá trị khác nhau? Có phải vấn đề trong chức năng của tôi không?

+3

Có lẽ nó có liên quan đến các ngôn ngữ khác nhau? Bạn đã thử thay thế 'aResponse.GetResponseStream()' bằng một giá trị cố định và xem liệu sự cố vẫn xảy ra? –

+1

Trang trên URL đó có thay đổi giữa các cuộc gọi không? – Oded

+0

@ErikSchierboom: Không. Hãy thử nó ngay bây giờ. Cảm ơn bạn –

Trả lời

1

Thử thêm nhật ký. Vì vậy, đầu tiên tải về tập tin vào chuỗi (viết nó một nơi nào đó trên đĩa, để so sánh nó sau này). Sau đó tính băm trên đĩa. Tôi gặp vấn đề như vậy trong một dự án của mình và trong trường hợp đó, sự cố xảy ra với máy chủ proxy đã bổ sung một thứ gì đó để phản hồi. Nhưng không có tệp trên đĩa, bạn không thể so sánh chúng.

Các vấn đề liên quan