2014-04-03 23 views
5

có đúng là e-mail có thể được trùng lặp bằng cách sử dụng một số tiêu đề của chúng như RFC thông báo của chúng-id phải là duy nhất không?Email trùng lặp

Có cách nào để tính cơ hội 1 cú đánh email đơn lẻ bị bỏ qua trong phương pháp pc này dưới đây (băm sha512 của 3 tiêu đề đó) không?

// $email is a parsed array containing 3 keys (mime headers) -> message_id, subject and date. $hashStr = $email['message_id']; $hashStr .= $email['subject']; $hashStr .= $email['date']; $uniqueEmailId = hash('sha512', $hashStr);

Nó là loại nhiệm vụ quan trọng mà không có email duy nhất sẽ được bỏ qua, rất có thể là chúng ta đang phải deduplicate qua nhiều (> 2) tỷ file kịch câm.

Trả lời

4

Hàm băm SHA512 tạo ra giá trị băm với 512 bit dữ liệu. Giả sử một phân phối ngẫu nhiên các bit, điều này làm việc với hơn 1.34e + 154 giá trị có thể. Ngay cả với hơn 2e + 9 mẫu, cơ hội của một vụ va chạm ngẫu nhiên là rất gần bằng không.

Tuy nhiên, đầu vào của bạn cho hàm băm không hoàn toàn ngẫu nhiên. message_id là một globally unique identifier mà "chỉ" có 5.3e + 36 giá trị có thể, và sự ngẫu nhiên phụ thuộc vào việc thực hiện. Theo liên kết wiki, tỷ lệ cược của một vụ va chạm là khoảng 50% tại 4,2e + 18 mẫu. Địa chỉ email và ngày tháng có khả năng cao hơn đáng kể.

Điều đó nói rằng, mà không thực sự làm toán xác suất, tôi sẽ nói rằng tỷ lệ cược là không đáng kể.

+0

ID thư không phải là GUID theo nghĩa đó. Nó độc đáo trên toàn cầu, nhưng được xây dựng theo cách thực hiện cụ thể. Kỹ thuật thông thường là kết hợp dấu thời gian hex # ở bên trái với tên máy chủ ở bên phải dấu @. Xem RFC 2822 pp22-24 –

2

Nếu id thư đã là duy nhất, có ít điểm trong băm (và do đó giới thiệu cơ hội thừa nhận không đáng kể của va chạm).
Dường như cách tiếp cận mạnh mẽ hơn là sử dụng chính id thư để làm cơ sở để so sánh.

+0

Sự kết hợp giữa thông điệp, chủ đề và ngày tháng này có làm cho cơ hội va chạm băm thấp hơn không? – Floris

+0

@ Floris no, nó sẽ giới thiệu cơ hội va chạm ngay từ đầu. Tôi không nói về hàm băm, nhưng lấy nó theo nghĩa đen, vì nó đã được cho là một mã định danh duy nhất – fstd

+0

Tôi biết, nhưng tôi phải xử lý (rất lớn) lượng dữ liệu email (hơn 10k tài khoản với 20k thư mỗi), vì vậy tôi cần 1 khóa cho một thông điệp duy nhất. Thật không may trong các thử nghiệm của tôi nó xuất hiện rằng tiêu đề Message-ID isen't thực sự "duy nhất". – Floris