Szukam utworzyć 32-bitowy skrót niektórych obiektów danych. Ponieważ nie mam ochoty pisać własnych funkcji skrótu, a md5 jest dostępne, moje obecne podejście polega na użyciu pierwszych 32 bitów (tj. Pierwszych 8 cyfr szesnastkowych) z tablicy mieszania md5. Czy to jest do przyjęcia?Czy pierwsze 32 bity sumy kontrolnej md5 są tak samo "losowe" jak każdy inny podciąg?
Innymi słowy, czy pierwsze 32 bity sumy kontrolnej md5 są tak samo "losowe" jak każdy inny podciąg? Czy jest jakikolwiek powód, dla którego wolałbym, powiedzmy, ostatnie 32 bity? a może XOR'ing razem cztery 32-bitowe podciągi?
Niektóre wyjaśnienia poboru:
- hashe te nie muszą być kryptograficznie bezpieczne.
- Nie przejmuję się wydajnością md5 - jest więcej niż wystarczająco szybki dla moich potrzeb.
- Te skróty muszą być "przypadkowe" na tyle, aby zderzenia były rzadkie.
- W tym systemie liczba przedmiotów nie powinna przekraczać 10 000 (realistycznie prawdopodobnie nie osiągnie połowy tego poziomu). Tak więc w najgorszym przypadku prawdopodobieństwo wystąpienia jakichkolwiek kolizji powinno wynosić około 1% (zakładając wystarczająco "losowy" skrót).
czy masz już skasowany MD5? (np. jako część metadanych sprawdzania Subversion) lub czy musisz sam obliczać wartość skrótu MD5? Jeśli to drugie, zgadzam się z komentarzem w/@Johannesa, CRC32 byłoby znacznie prostsze. –
Wygląda na to, że nie ma sposobu, aby zapobiegawczo zaadresować "twoje pytanie jest nieważne, ponieważ powinieneś zrobić to w ten sposób" komentarze ... – Kip
Niestety, nie miałem na myśli * nie * używaj skrótu MD5, po prostu oznacza, że CRC32 jest prostszy. Ty lub Twoi klienci jesteście jedynymi, którzy mogą ocenić, jakie algorytmy spełniają wasze wymagania. –