2010-05-06 34 views
6

Tôi sử dụng hàm băm MD5 cho identifying files with unknown origin. Không có kẻ tấn công ở đây, vì vậy tôi không quan tâm rằng MD5 đã bị hỏng và người ta có thể tạo ra xung đột.Tôi có thể sử dụng phần băm MD5 để nhận dạng dữ liệu không?

Vấn đề của tôi là tôi cần cung cấp nhật ký để các vấn đề khác nhau được chẩn đoán dễ dàng hơn. Nếu tôi đăng nhập mỗi băm như một chuỗi hex quá dài, bất tiện và trông xấu xí, vì vậy tôi muốn rút ngắn chuỗi băm.

Bây giờ tôi biết rằng chỉ cần tham gia một phần nhỏ của GUID is a very bad idea - GUID được thiết kế là duy nhất, nhưng một phần trong số đó thì không.

Điều này cũng đúng với MD5 - tôi có thể nói 4 byte đầu tiên của MD5 và giả sử rằng tôi chỉ nhận được xác suất va chạm cao hơn do số byte giảm so với giá trị băm ban đầu không?

+0

bản sao có thể có của http://stackoverflow.com/questions/860405/are-the-first-32-bits-of-an-md5-hash-just-as-random-as-any-other-substring –

+0

Tôi tự hỏi nếu nhận được 4 byte đầu tiên là tốt hơn so với sử dụng CRC32 của băm md5. –

+0

Có, bởi vì 32 bit đầu tiên trong MD5 được cho là phân phối ngẫu nhiên một cách ngẫu nhiên, vì vậy bạn không thể cải thiện phân phối. –

Trả lời

7

Câu trả lời ngắn gọn là có, bạn có thể sử dụng 4 byte đầu tiên như là một id. Cảnh giác với những nghịch lý ngày sinh nhật mặc dù:

http://en.wikipedia.org/wiki/Birthday_paradox

Nguy cơ một vụ va chạm nhanh chóng tăng lên khi bạn thêm file. Với 50.000 có khoảng 25% cơ hội mà bạn sẽ nhận được một vụ va chạm id.

EDIT: Ok, chỉ cần đọc liên kết đến câu hỏi khác của bạn và với 100.000 tệp cơ hội va chạm là khoảng 70%.

1

Một cách khác để rút ngắn hàm băm là chuyển đổi nó thành một cái gì đó hiệu quả hơn HEX như Base64 hoặc một số biến thể khác.

Thậm chí nếu bạn được xác định đảm nhận 4 ký tự, việc lấy 4 ký tự base64 cung cấp cho bạn nhiều bit hơn hex.

+0

chỉ khi bạn biến hex thành dạng 0-F. Bạn vẫn có thể sử dụng giá trị byte thô và sử dụng giá trị đó. Mà trong trường hợp đó sẽ có nhiều bit hơn base-64 – Sekhat

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