32 bit cho chỉ mục? Bàn của bạn lớn đến mức nào ?!
Hãy xem xét hầu hết các địa chỉ IPv6 sẽ dựa trên địa chỉ phần cứng. Hãy nhìn vào RFC 4291:
[EUI64] defines a method to create an IEEE EUI-64 identifier from an
IEEE 48-bit MAC identifier. This is to insert two octets, with
hexadecimal values of 0xFF and 0xFE (see the Note at the end of
appendix), in the middle of the 48-bit MAC (between the company_id
and vendor-supplied id). An example is the 48-bit IEEE MAC with
Global scope:
|0 1|1 3|3 4|
|0 5|6 1|2 7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+
Đó là trường hợp, hãy thử hack này nhanh chóng và dơ bẩn đó sẽ làm việc trong hầu hết các trường hợp (giả định một phân bố của các cổng và địa chỉ MAC):
- Lấy thấp hơn 16 bit của địa chỉ IPv6 nguồn. Dịch chuyển nó 16 bit sang trái và OR với 16 byte thấp hơn của địa chỉ IP đích
- Lấy cổng nguồn. Chuyển nó sang bên trái 16 bit và OR nó với cổng đích
- XOR kết quả của các giá trị hai trên 32-bit cùng
Nếu người dùng đang sử dụng các địa chỉ bằng tay được giao, hàm băm này giành' t được phân phối rất đều, nhưng tôi nghĩ rằng trong hầu hết các trường hợp, nó sẽ rất gần. Bạn có thể ném vào (XOR) một số bit từ phần trên của địa chỉ nếu bạn muốn.
là yêu cầu hiệu suất cao? – Alnitak
Tại sao không sử dụng MD5 hoặc SHA-1 và cắt các bit không cần thiết? Mặc dù, tôi phải nói, điều đó sẽ lãng phí rất nhiều thông tin. Hay bạn có bất kỳ yêu cầu nào khác như tốc độ hoặc mức tiêu thụ bộ nhớ? – RedX
@RedX - xem ^^ _là hiệu suất cao một yêu cầu_ :) – Alnitak