Niezależne hashowanie
Niezależne hashowanie oznacza niezależne stosowanie funkcji mieszania dla każdej części danych. Rysunek 1 ilustruje tę koncepcję, obliczając skróconą wartość hash dwóch odrębnych słów osobno.
Białe pola zawierające słowo reprezentują dane, które mają być mieszane, a szare kółka odpowiadają odpowiednim wartościom skrótu. Strzałki, które wskazują pola z okręgów, schematycznie ilustrują transformację danych w wartości haszującej. Jak widać na rysunku 1, różne słowa dają różne wartości mieszania.
Powtórne haszowanie
Nauczyłeś się, że funkcje mieszania przekształcają dowolny dowolny fragment danych w wartość mieszającą. Sama wartość hashująca może być uznana za część danych. W związku z tym powinno być możliwe podanie wartości mieszania jako wartości wejściowej dla funkcji mieszającej i obliczenie jej wartości skrótu. A to faktycznie działa! Powtórzone hashowanie to powtórne zastosowanie funkcji hash do własnego wyniku. Rysunek 2 ilustruje tę koncepcję, obliczając wielokrotnie skróconą wartość mieszania. Tekst Hello World! daje wartość skrótu 7F83B165, co z kolei daje skróconą wartość mieszania 45A47BE7.
Mieszane hashowanie
Celem mieszanego mieszania jest uzyskanie pojedynczej wartości skrótu dla więcej niż jednej części danych za jednym zamachem. Łączenie wszystkich niezależnych elementów danych w jedną część danych i obliczanie ich wartości haszującej jest sposobem na osiągnięcie tego. Jest to szczególnie przydatne, jeśli chcesz utworzyć jedną wartość mieszania dla zbioru danych, które są dostępne w danym czasie. Ponieważ łączenie danych wiąże się z kosztami mocy obliczeniowej, czasem i pamięcią, łączone mieszanie powinno być stosowane tylko wtedy, gdy pojedyncze dane są niewielkie. Inną wadą połączonego mieszania jest to, że wartości mieszania poszczególnych fragmentów danych nie są dostępne, ponieważ tylko połączone dane są przekazywane do funkcji mieszania. Rysunek 3 przedstawia koncepcję kombinowanego mieszania.
Poszczególne słowa są najpierw łączone w jedno słowo z przestrzenią między nimi, a wynikowa fraza jest następnie mieszana. Wynikowa wartość mieszania przedstawiona na rysunku 3 jest konsekwentnie identyczna z pierwszą wartością mieszania na rysunku 2. Zauważ, że wartość mieszana połączonych danych zależy krytycznie od sposobu połączenia danych. Na rysunku 2, oba słowa zostały połączone, pisząc je obok siebie z przestrzenią między nimi, co w konsekwencji daje Hello World! Czasami określone symbole, takie jak znak plus (+) lub znak hashtag (#) są używane do oznaczenia punktu, w którym dane są połączone, co w rezultacie wpływa na wynikową wartość skrótu.
Sekwencyjne mieszanie
Celem sekwencyjnego mieszania jest przyrostowa aktualizacja wartości skrótu w miarę nadejścia nowych danych. Osiąga się to poprzez jednoczesne stosowanie mieszanego i powtarzanego mieszania. Istniejąca wartość skrótu jest łączona z nowymi danymi, a następnie przekazywana do funkcji skrótu, aby uzyskać zaktualizowaną wartość skrótu. Sekwencyjne mieszanie jest szczególnie przydatne, jeśli chcesz zachować pojedynczą wartość mieszania w czasie i aktualizować je, gdy tylko pojawią się nowe dane. Zaletą tego typu mieszania jest to, że w danym momencie masz wartość mieszającą, której ewolucję można prześledzić do nadejścia nowych danych. Rysunek 4 ilustruje pojęcie sekwencyjnego mieszania, rozpoczynając od słowa mieszającego Hello indywidualnie, co daje skróconą wartość skrótu 185F8DB3.
Gdy nowe dane są reprezentowane przez słowo Świat! przyjazd, jest on łączony z istniejącą wartością skrótu i dostarczany jako wejście do funkcji mieszającej. Wartość skrótu 5795A986 to skrócona wartość skrótu tekstu wejściowego World! 185F8DB3.
Hierarchiczne Hashowanie
Rysunek 5 ilustruje pojęcie hierarchicznego mieszania.
Zastosowanie kombinacji mieszania do pary wartości mieszania tworzy małą hierarchię wartości mieszania z jedną wartością na górze. Podobnie jak w przypadku mieszanego mieszania, ideą hierarchicznego mieszania jest tworzeniem pojedynczej wartości skrótu dla zbioru danych. Hierarchiczne mieszanie jest bardziej wydajne, ponieważ łączy wartości mieszania, które mają zawsze stały rozmiar zamiast oryginalnych danych, które mogą mieć dowolny rozmiar. Dodatkowo, hierarchiczne hashowanie łączy tylko dwie wartości mieszania w każdym kroku, podczas gdy łączone mieszanie będzie łączyć tyle danych, ile podasz w jednej próbie.