Độ dài tối đa cho đầu vào / đầu ra MD5


164

Độ dài tối đa của chuỗi có thể có băm md5 là bao nhiêu? Hoặc: Nếu nó không có giới hạn, và nếu vậy thì độ dài tối đa của giá trị đầu ra md5 sẽ là bao nhiêu?


2
Theo dõi wiki: en.wikipedia.org/wiki/MD5
Frank

Câu trả lời:


240

MD5 xử lý một thông báo có độ dài tùy ý thành đầu ra có độ dài cố định 128 bit, thường được biểu diễn dưới dạng một chuỗi gồm 32 chữ số thập lục phân.


95
Lưu ý đến bản thân: MD5 độ dài băm = 128 bits= 16 bytes=32 hex digits
checksum

2
[Chỉnh sửa bình thường] 32 chữ số hex và chuỗi chỉ chứa các từ từ 'az' và các chữ số từ '0-9'
v1h5

1
Tôi nhận thấy một chút sai lầm trong các ý kiến ​​trước đây. Văn bản phải được trích dẫn :) "32 chữ số hex và chuỗi chỉ chứa các chữ cái từ 'az' và chữ số từ '0-9'"
Remis B

2
@Shafizadeh Như câu trả lời, đầu vào có độ dài tùy ý. Điều này có nghĩa là tham số có thể là bất kỳ độ dài bạn cần.
kdojeteri

1
@Peping Một hiệu chỉnh nhỏ: Đầu vào có thể miễn là kiểu dữ liệu được sử dụng trong ngôn ngữ lập trình được sử dụng có thể. Ví dụ: Chuỗi của Java sử dụng một mảng bên trong, do đó, một chuỗi chỉ có thể chứa (2 ^ 31) -1 ký tự (hoặc ít hơn, tùy thuộc vào kích thước heap). Đó cũng sẽ là đầu vào tối đa của bạn cho hàm MD5 trong Java. Nhưng về mặt lý thuyết, hàm MD5 thực sự có thể xử lý một đầu vào có độ dài tùy ý. ;)
RicoBrassers

38

Nối chiều dài

Một đại diện 64 bit của b (độ dài của thông báo trước khi các bit đệm được thêm vào) được thêm vào kết quả của bước trước đó. Trong trường hợp không chắc là b lớn hơn 2 ^ 64, thì chỉ sử dụng 64 bit thứ tự thấp của b.

  • Giá trị băm luôn là 128 bit. Nếu bạn mã hóa nó dưới dạng chuỗi thập lục phân, bạn có thể mã hóa 4 bit cho mỗi ký tự, cho 32 ký tự.
  • MD5 không mã hóa. Nói chung, bạn không thể "giải mã" hàm băm MD5 để có được chuỗi gốc.

Xem thêm tại đây .


Chiều dài của thông điệp là không giới hạn , bạn có nghĩa là gì nhắn ? Là nó đầu vào? Câu hỏi của tôi làMD5("how many characters exactly?");
Shafizadeh

@Shafizadeh Đầu vào của bạn có thể dài nhất có thể bằng ngôn ngữ lập trình hiện tại của bạn, trong Java, đây sẽ là (2 ^ 31) -1 ký tự trong một chuỗi. Và vâng, "thông điệp" là đầu vào.
RicoBrassers

@Shafizadeh ... hoặc từ một tệp, đầu vào có thể lớn bằng dung lượng lưu trữ có sẵn.
ToolmakerSteve

9

Bạn có thể có bất kỳ độ dài nào, nhưng tất nhiên, có thể có vấn đề về bộ nhớ trên máy tính nếu đầu vào Chuỗi quá dài. Đầu ra luôn là 32 ký tự.


4
Nếu đầu vào chuỗi quá dài, nó sẽ không tồn tại trong hệ thống ở vị trí đầu tiên, trừ khi nó nằm trong một tệp, trong trường hợp đó bạn có thể chuyển các khối sang hàm digest khi chúng được đọc, nói cách khác, bạn chỉ cần để có blockbyte của đầu vào có sẵn tại một thời điểm.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

6

Thuật toán đã được thiết kế để hỗ trợ độ dài đầu vào tùy ý. Tức là bạn có thể tính băm các tệp lớn như ISO của DVD ...

Nếu có giới hạn cho đầu vào, nó có thể đến từ môi trường sử dụng hàm băm. Giả sử bạn muốn tính toán một tệp và môi trường có giới hạn MAX_FILE.

Nhưng chuỗi đầu ra sẽ luôn giống nhau: 32 ký tự hex (128 bit)!


4

Băm MD5 128 bit được biểu diễn dưới dạng một chuỗi gồm 32 chữ số thập lục phân.


4

Bạn có thể muốn sử dụng SHA-1 thay vì MD5 , vì MD5 được coi là bị hỏng.

Bạn có thể đọc thêm về các lỗ hổng MD5 trong bài viết Wikipedia này .


5
đây không phải là nhiều hơn một tin đồn. MD5 đủ tốt cho hầu hết các tác vụ phát triển web thông thường
Ý thức chung của bạn vào

11
Người tạo ra nó, cũng như Bruce Schneier và An ninh Nội địa đều đồng ý rằng nó đã bị phá vỡ ... Bạn cần phải thuyết phục thêm bao nhiêu lần nữa để thuyết phục bạn rằng nó thực sự đã bị phá vỡ trong một thời gian? Thực tế là nó dễ dàng tìm thấy một đầu vào tạo ra một hàm băm cụ thể. Tất nhiên bạn có thể giảm thiểu rủi ro này bằng cách muối đầu vào của bạn, sử dụng muối đủ lớn. Lưu ý phụ: SHA-1 được coi là bị hỏng. Nếu bạn khuyên mọi người nâng cấp, hãy khuyên họ nâng cấp lên SHA-2, làm ơn.
kander

3
@kander oh tôi cần rất ít. Một ví dụ. Đưa ra một hàm băm, bạn sẽ mang lại một chuỗi nguồn? Không phải là một liên kết đến một số bài viết tuyệt vời, không phải ý kiến ​​của ai đó mà chỉ là một chuỗi nguồn?
Ý thức chung của bạn

2
Không ai thực sự đề cập đến những gì họ thực sự có nghĩa theo thuật ngữ "bị hỏng". Mặc dù, @YourCommonSense có ý nghĩa.
JSmyth

4
Bạn đang nói về việc sử dụng bảo mật của MD5. Nhưng MD5 (hoặc bất kỳ kỹ thuật băm nào khác) có rất nhiều công dụng khác. Tôi, trước hết, muốn sử dụng nó để đổi tên một tệp bằng hàm băm của nó. Tôi chắc chắn không quan tâm đến khả năng chống va chạm của MD5. Tất cả mọi thứ bạn đăng vẫn là sự thật, chỉ 2 xu của tôi.
tfrascaroli

3

Không có giới hạn cho đầu vào của md5 mà tôi biết. Một số triển khai yêu cầu toàn bộ đầu vào được tải vào bộ nhớ trước khi chuyển nó vào hàm md5 (nghĩa là việc thực hiện tác động lên một khối bộ nhớ, không phải trên một luồng), nhưng đây không phải là giới hạn của chính thuật toán. Đầu ra luôn là 128 bit. Lưu ý rằng md5 không phải là một thuật toán mã hóa, mà là một hàm băm mật mã. Điều này có nghĩa là bạn có thể sử dụng nó để xác minh tính toàn vẹn của một đoạn dữ liệu, nhưng bạn không thể đảo ngược quá trình băm. Cũng lưu ý rằng md5 được coi là bị hỏng, vì vậy bạn không nên sử dụng nó cho bất kỳ điều gì liên quan đến bảo mật (vẫn ổn để xác minh tính toàn vẹn của các tệp đã tải xuống và như vậy).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.