2010-11-17 10 views
10

Tôi đang làm việc trên ứng dụng Windows 7. Tôi đang sử dụng this implementation cho MD5 băm trong ánh bạc.Băm MD5 trong silverlight

Tôi đang sử dụng mã này -

protected string GetMD5Hash(string input) 
    { 
     byte[] bs = System.Text.Encoding.UTF8.GetBytes(input); 
     MD5Managed md5 = new MD5Managed(); 
     byte[] hash = md5.ComputeHash(bs); 

     StringBuilder sb = new StringBuilder(); 
     foreach (byte b in bs) 
     { 
      sb.Append(b.ToString("x2").ToLower()); 
     } 

     return sb.ToString();  
    } 

Nhưng, tôi không nhận được băm MD5 chính xác cho các đầu vào tôi cung cấp. Tôi không chắc chắn những gì là sai với mã này. Nếu có ai đã sử dụng this implementation cho MD5 băm trong ánh bạc, bạn có biết tôi đã đi sai ở đâu không?

+1

Như một lưu ý, MD5 có thể được coi là lỗi thời bởi bây giờ - nó không an toàn. Tôi muốn khuyên bạn nên sử dụng một thực hiện của gia đình SHA. –

+0

Tại sao bạn nghĩ nó sai? Bạn đang so sánh nó với cái gì? Có những nhận xét trên trang bạn liên kết đến đó nói rằng đó là lỗi và không nên được sử dụng –

+0

@Mr. Thất vọng Tôi đang làm việc với API của bên thứ 3 và do đó nó thực sự không tùy thuộc vào quyết định của tôi. – pavanred

Trả lời

11

Bạn đang trở về phiên bản hex của đầu vào, chứ không phải băm:

foreach (byte b in bs) 

nên

foreach (byte b in hash) 

(Một cách khác là sử dụng Convert.ToBase64String(hash) nếu bạn không nhớ nó nằm trong Base64 thay vì hex.)

+0

Ồ, tôi cảm thấy ngớ ngẩn. Tôi nên phát hiện ra điều đó. Cảm ơn – pavanred

+5

@Pavanred Vâng, bạn có thể nhận được ducky cao su để ngăn chặn cảm giác ngớ ngẩn :) http://en.wikipedia.org/wiki/Rubber_duck_debugging –

4

Đã có câu trả lời được chấp nhận cho điều này, nhưng đối với những người đang sử dụng MD5 trong Silverlight hoặc Windows Phone, tôi đăng một liên kết tới another implementation của MD5 mà tôi đã thành công hơn với.

Tôi đã dành vài giờ đánh đầu vào tường với việc thực hiện được đề cập bởi bài đăng gốc, cố gắng làm cho nó hoạt động trong dự án Windows Phone của tôi. Nó đã làm việc trong một số trường hợp và không phải trong những trường hợp khác.

Phiên bản của Jeff Wilcox hoạt động hoàn hảo.