2010-04-24 12 views
6

Szukam zakresu mieszania (md5 lub sha1) i podzielenia go na n równych zakresów.Podział całego zakresu skrótu na równe zakresy

Na przykład, jeśli m (liczba węzłów) = 5, cały zakres skrótu zostanie podzielony przez 5, aby zapewnić jednolity rozkład zakresów kluczy. Chciałbym, aby n = 1 (węzeł 1) był od początku zakresu mieszania do 1/5, 2 od 1/5 do 2/5 itd. Aż do końca.

Zasadniczo potrzebuję mieć przypisane zakresy kluczy do każdego n tak, że gdy będę mieszał wartość, wie, który n zajmie się tym zakresem.

Jestem nowicjuszem i nie jestem pewien, od czego mógłbym zacząć rozwiązywać ten projekt. Każda pomoc, jaką mógłbyś dać, byłaby świetna.

+0

To mylące sposobu korzystania n zarówno jako liczbę zakresów podzielić na, i jako wskaźnik dla jednego z tych n części. – Joren

+0

To całe pytanie jest mylące i domyślam się, że to, co próbujesz zrobić, cokolwiek to jest, jest niemożliwe, ponieważ kryptograficzne funkcje mieszające są faktycznie nieodwracalne. –

+0

Zmieniłem pytanie wokół niektórych naprawiających niejednoznaczne użycie n i próbując wyjaśnić trochę więcej. – noxtion

Odpowiedz

1

Jeśli możesz stanąć trochę bardzo ciężko, aby usunąć błąd (dowolna potęga dwóch nie da się podzielić równomiernie w 5, więc musi być pewne odchylenie), następnie modulo (% w C i wiele innych języków z C- jak składnia) jest sposobem na podzielenie pełnego zakresu na 5 partycji o prawie identycznych rozmiarach.

Każda wiadomość m z md5(m)%5==0 jest w pierwszym rozbiorze itp

0

Jeśli szukasz umieścić wartość skrótu do liczby „wiadra” równomiernie, a następnie niektóre prosta matematyka rade. Zwróć uwagę na przypadki zaokrągleń ... Lepiej byłoby użyć potęgi 2 dla wartości ŁYŻKI.

Jest to kod Pythona, przez sposób, który wspiera duże liczby całkowite ...

BUCKETS = 5 
BITS  = 160 

BUCKETSIZE = 2**BITS/BUCKETS 

int('ad01c5b3de58a02a42367e33f5bdb182d5e7e164', 16)/BUCKETSIZE == 3 
int('553ae7da92f5505a92bbb8c9d47be76ab9f65bc2', 16)/BUCKETSIZE == 1 
int('001c7c8c5ff152f1cc8ed30421e02a898cfcfb23', 16)/BUCKETSIZE == 0