Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

FNV (Informatik)

In der Informatik ist Fowler-Noll-Vo (kurz: FNV) ein Algorithmus zur Generierung von Streuwerten über Datenfelder: eine sogenannte Hash-Funktion.

Inhalt4 Abschnitte
  1. 1. Was FNV ist und wofür es verwendet wird
  2. 2. Funktionsweise und Nutzen von Hash-Funktionen
  3. 3. Berechnung mit FNV-1a
  4. 4. Anpassung an die Schlüsselbreite

Was FNV ist und wofür es verwendet wird

Fowler-Noll-Vo (FNV) ist eine Hash-Funktion, also ein Algorithmus, der aus einem Datenfeld einen Streuwert beziehungsweise Schlüsselwert erzeugt. Der Name geht auf die Entwickler Glenn Fowler, Landon Curt Noll und Phong Vo zurück.

FNV ist auf Schnelligkeit, Zuverlässigkeit und die Verarbeitung großer Datenmengen ausgerichtet. Der Algorithmus wird beispielsweise in DN-Systemen, Datenbanken und E-Mail-Servern eingesetzt. Für kryptographische Anwendungen eignet er sich jedoch nicht.

Funktionsweise und Nutzen von Hash-Funktionen

Eine Hash-Funktion liest ein Datenfeld, etwa eine Zeichenkette oder eine Datei, Byte für Byte ein. Daraus berechnet sie einen möglichst eindeutigen Schlüsselwert. Das Datenfeld wird damit gewissermaßen auf einen Zahlenwert verdichtet. Bei der Berechnung spielen Primzahlen eine wichtige Rolle.

Mit Schlüsselwerten verknüpfte Daten lassen sich in Datenstrukturen wie Binärbäumen, B-Bäumen, AVL-Bäumen oder Hash-Tabellen indizieren und dadurch schneller finden. Streuwerte können außerdem zur Prüfung der Unversehrtheit und Konsistenz von Daten dienen: Für dasselbe Datenfeld entsteht immer derselbe Schlüsselwert, solange sowohl das Feld als auch der verwendete Algorithmus exakt gleich bleiben.

Berechnung mit FNV-1a

Bei der empfohlenen Variante FNV-1a mit einem 64-Bit-Schlüssel beginnt die Berechnung mit dem Anfangswert 0xcbf29ce484222325. Als Primzahl wird 0x00000100000001b3 verwendet.

Für jedes Byte des Datenfeldes wird zuerst der bisherige Hashwert durch ein bitweises XOR mit dem aktuellen Byte verknüpft. Anschließend wird das Ergebnis mit der Primzahl multipliziert. Die zentrale Berechnung lautet: Hash = (Hash ^ *pBuffer) * MagicPrime.

Die ursprüngliche Variante FNV-1 verwendet dieselben beiden Operationen, vertauscht aber ihre Reihenfolge: Dort erfolgt die Multiplikation vor dem XOR.

Anpassung an die Schlüsselbreite

Für jede Schlüsselbreite gibt es eine eigene geeignete Primzahl. Soll ein schmalerer oder breiterer Schlüsselwert erzeugt werden, muss daher auch der Primzahlwert angepasst werden. Nur so bleibt eine gute Verteilung der Streuwertbits erhalten.

Weiterlesen

Algorithmus Algorithmen bestehen aus endlich vielen, wohldefinierten Einzelschritten. ... Damit können sie zur Ausführung in ein Computerprogramm implementiert, aber auch in … Domain Name System Das Domain Name System, deutsch Domain-Namen-System, (DNS) ist ein hierarchisch unterteiltes Bezeichnungssystem in einem meist IP-basierten Netz zur … Datenbank Eine Datenbank, auch Datenbanksystem genannt, ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe einer Datenbank ist es, große … Datenstruktur In der Informatik und Softwaretechnik ist eine Datenstruktur ein Objekt, welches zur Speicherung und Organisation von Daten dient. Es handelt sich um eine … Binärbaum Binärbäume sind in der Informatik die am häufigsten verwendete Unterart der Bäume. Im Gegensatz zu anderen Arten von Bäumen können die Knoten eines … B-Baum Ein B-Baum (englisch B-tree) ist in der Informatik eine Daten- oder Indexstruktur, die häufig in Datenbanken und Dateisystemen eingesetzt wird. AVL-Baum Der AVL-Baum ist nach den sowjetischen Mathematikern Georgi Maximowitsch Adelson-Welski und Jewgeni Michailowitsch Landis benannt, die die Datenstruktur im Jahr … Hashtabelle Das Hashverfahren ist ein Algorithmus zum Suchen von Datenobjekten in großen Datenmengen. ... Hashwert, der von einer Hashfunktion aus dem Schlüssel … C (Programmiersprache) C ist eine imperative und prozedurale Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories entwickelte.