2010-03-12 16 views
11

Tôi đang làm một hash md5, và chỉ muốn chắc chắn là kết quả của:Kết quả của một băm md5 hay phụ thuộc vào máy chủ?

md5.ComputeHash(bytePassword); 

là phù hợp không phụ thuộc vào máy chủ?

ví dụ: cửa sổ 2003/2008 và 32/64 bit, vv

+3

Bạn có đang thực hiện băm md5 để che khuất mật khẩu trong cơ sở dữ liệu của mình không? Bạn không nên http://wblinks.com/notes/storing-passwords-the-wrong-better-and-even-better-way – gingerbreadboy

Trả lời

18

Có, đó là nhất quán, các md5 algorithm specification định nghĩa nó không phụ thuộc nền tảng.

+3

Trừ mà tôi đã thấy một số hệ thống đại diện cho đầu ra với chữ hoa chữ cái và một số có thấp hơn chữ cái. Nếu bạn so sánh biểu diễn chuỗi của đầu ra, hãy chắc chắn và thực hiện so sánh không phân biệt chữ hoa chữ thường. –

+2

Bạn có đang trộn biểu diễn thập lục phân (-> Chuỗi) với giá trị MD5 (-> Numerical) và so sánh chuỗi không? Trong trường hợp đó, có thể xảy ra rằng các ký tự hex hợp lệ là chữ thường hoặc chữ hoa - nhưng giá trị là như nhau. Nói cách khác: Nếu bạn so sánh 0xAa với 0xaA và xem xét trường hợp có liên quan, thì bạn không so sánh chính xác và tôi sẽ xem xét lỗi đó. –

+0

Trường hợp không liên quan ở đây, vì phương thức trả về một mảng các byte - nếu anh ta muốn chuyển đổi nó thành một chuỗi biểu diễn các byte như các giá trị thập lục phân thì nó sẽ quan trọng. – BrainSlugs83

1

MD5 băm là [hệ thống/lần/bất cứ điều gì ngoại trừ đầu vào] độc lập

3

Kết quả của việc mã hóa md5 là một con số. Số được trả lại cho một đầu vào nhất định luôn giống nhau, bất kể máy chủ hoặc nền tảng bạn sử dụng là gì.

Tuy nhiên, biểu thức của số có thể thay đổi. Ví dụ: 11.0 có cùng số, nhưng được biểu thị khác nhau. Tương tự, một số nền tảng sẽ trả lại băm được định dạng hơi khác so với các nền tảng khác. Trong trường hợp này, bạn có một mảng byte, và điều đó khá an toàn để vượt qua. Chỉ cần cẩn thận những gì bạn làm sau khi chuyển đổi nó thành một chuỗi.

6

MD5 không phụ thuộc vào hệ điều hành và kiến ​​trúc. Vì vậy, nó là "nhất quán".

Tuy nhiên, MD5 nhận đầu vào là chuỗi bit tùy ý và xuất ra chuỗi 128 bit. Trong nhiều tình huống, bạn muốn có chuỗi. Ví dụ, bạn muốn băm mật khẩu, và mật khẩu ban đầu là một chuỗi. Việc chuyển đổi chuỗi đó thành một chuỗi các bit không phải là một phần của MD5, và một số quy ước tồn tại. Tôi không biết chính xác về C#, nhưng phương thức tương đương Java String.getBytes() sẽ sử dụng "bộ ký tự mặc định nền tảng" có thể khác với cài đặt hệ điều hành. Tương tự, đầu ra của MD5 thường được chuyển đổi thành chuỗi có ký hiệu thập lục phân và có thể là chữ hoa hoặc chữ thường hoặc bất kỳ ký tự nào.

Vì vậy mà trong khi MD5 chính nó là phù hợp, lỗi thường ẩn nấp trong những phần mà chuẩn bị dữ liệu cho MD5 và sau quá trình sản lượng của nó. Cẩn thận.

+0

Trong C#/NET bạn nên xác định mã hóa bạn muốn sử dụng - ví dụ: Encoding.UTF8.GetBytes ("Blah"), Encoding.ASCII.GetBytes ("Blah"), Encoding.UTF32.GetBytes ("Blah") ... – BrainSlugs83

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