2011-08-01 44 views
5

Tôi tự hỏi ... chiều dài tối đa của chuỗi sẽ bị băm là bao nhiêu?Độ dài tối đa của chuỗi sẽ bị băm nhỏ là bao nhiêu?

Ví dụ: để băm Hello, world! với SHA-1 không có vấn đề gì. Nhưng những gì về chuỗi đó giống như 100'000'000 ký tự dài? Nó có hoạt động không? Liệu nó bằng cách nào đó làm tăng khả năng va chạm?

Có giới hạn nào không?

Trả lời

8

Wikipedia hiển thị kích thước thư tối đa theo bit cho SHA-1 là 2^64−1. Vì vậy, đây sẽ là 2^60-1 ký tự unicode. Trong số thập phân 1.152.921.504.606.846.975 ký tự.

Giới hạn chuỗi ngôn ngữ nhất là 2GB - 1 ký tự.

Xác suất va chạm phải tuân theo birthday problem, cụ thể là bit "Bảng xác suất". Tôi là không đủ thông minh quá lười biếng để làm việc xác suất cho va chạm sử dụng SHA-1 với một tập hợp các chuỗi 100MB ...

+1

Xác suất va chạm phụ thuộc vào số lượng chuỗi bạn băm, không phải theo chiều dài riêng lẻ của mỗi chuỗi. Bạn sẽ không nhận được va chạm nào cả với một chuỗi đơn, vì bạn chỉ có một giá trị ... –

+0

@Thomas Pornin: Vâng, tôi đã nói "một bộ sưu tập các chuỗi 100MB". Và nó sẽ là một bộ sưu tập khá lớn với tất cả các permuatations vv – gbn

3

Bạn có thể băm đầu vào dài. Có, thuật toán băm vẫn hoạt động trên các đầu vào lớn. Không, đầu vào lớn hơn không làm tăng xác suất va chạm. (Nhưng chúng sẽ mất nhiều thời gian hơn.) Bạn nên nhớ rằng 100 triệu ký tự không phải là nhiều byte cho máy tính và hầu hết các băm được sử dụng ngày nay là nhanh. Nó sẽ mất một máy tính hiện đại có thể một vài giây để băm một chuỗi dài.

Không có giới hạn lý thuyết và giới hạn thực tế cho phép sử dụng hợp lý.

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