Inhaltsverzeichnis
1. Was ist ein Hashing-Algorithmus? Hash und Hashing stammen beide vom Wort Hash, ersteres ist eine Transliteration und letzteres ist eine freie Übersetzung. Es handelt sich um einen Algorithmus, der einen Binärwert beliebiger Länge in einen Binärwert fester Länge abbilden kann. Der abgebildete Binärwert fester Länge wird als Hash-Wert bezeichnet. Ein ausgezeichneter Hash-Algorithmus muss die folgenden Anforderungen erfüllen:
Die gebräuchlicheren Hash-Verschlüsselungsalgorithmen sind MD5 (MD5 Message-Digest Algorithm, MD5 Message Digest-Algorithmus) und SHA (Secure Hash Algorithm, sicherer Hash-Algorithmus).
Das Klartext-Passwort kann nicht aus dem Hash-Wert-Chiffretext abgeleitet werden und die Wahrscheinlichkeit eines Hash-Konflikts ist relativ gering. Diese beiden Punkte gewährleisten die Zuverlässigkeit des Hash-Algorithmus als sichere Verschlüsselungsmethode.
Wir können nach bestimmten Regeln einige Binärdaten aus einer großen Datei entnehmen und einen Hash-Algorithmus verwenden, um einen Hash-Wert als eindeutige Kennung der Datei zu erhalten. Auf diese Weise müssen dieselben Dateien denselben Hash-Wert haben, dh dieselbe eindeutige Kennung. Verschiedene Dateien haben mit hoher Wahrscheinlichkeit unterschiedliche eindeutige Kennungen von Hash-Werten Vergleichen Sie alle Binärdaten der beiden Dateien im Detail, um festzustellen, ob es sich um dieselbe Datei handelt. Die Wahrscheinlichkeit, dass dieses Ereignis eintritt, ist zu gering. Diese Lösung gewährleistet jedoch sowohl Effizienz als auch Zuverlässigkeit.
Dieses Anwendungsszenario nutzt die Features 2 und 4 des Hash-Algorithmus.
Es gibt viele Lastausgleichsalgorithmen, z. B. Abfragen, zufällige, gewichtete Abfragen usw., aber das Ziel besteht darin, einen sitzungsgebundenen Lastausgleichsalgorithmus zu implementieren, dh alle Lastausgleichsalgorithmen sind gleich Client während einer Sitzung. Anfragen werden alle an denselben Server weitergeleitet.
2.6 Daten-Sharding
2.7 Verteilter Speicher
3. Zusammenfassung
Heim Technologie-Peripheriegeräte KI Verstehen Sie den Hash-Algorithmus und Anwendungsszenarien in einem Artikel

Verstehen Sie den Hash-Algorithmus und Anwendungsszenarien in einem Artikel

Apr 13, 2023 am 11:55 AM
哈希算法 大文件 hash

1. Was ist ein Hashing-Algorithmus? Hash und Hashing stammen beide vom Wort Hash, ersteres ist eine Transliteration und letzteres ist eine freie Übersetzung. Es handelt sich um einen Algorithmus, der einen Binärwert beliebiger Länge in einen Binärwert fester Länge abbilden kann. Der abgebildete Binärwert fester Länge wird als Hash-Wert bezeichnet. Ein ausgezeichneter Hash-Algorithmus muss die folgenden Anforderungen erfüllen:

kann die Originaldaten nicht umgekehrt aus dem Hash-Wert ableiten;

reagiert sehr empfindlich auf die Eingabedaten, und ein anderes Bit führt dazu, dass der Hash-Wert sehr unterschiedlich ist; Die Wahrscheinlichkeit eines Hash-Konflikts muss sehr gering sein;

Der Berechnungsprozess des Hash-Algorithmus muss einfach und effizient genug sein, auch wenn die Originaldaten sehr lang sind, kann der Hash-Wert schnell ermittelt werden

2 der Hash-Algorithmus

2.1 Sichere Verschlüsselung

Die gebräuchlicheren Hash-Verschlüsselungsalgorithmen sind MD5 (MD5 Message-Digest Algorithm, MD5 Message Digest-Algorithmus) und SHA (Secure Hash Algorithm, sicherer Hash-Algorithmus).

Das Klartext-Passwort kann nicht aus dem Hash-Wert-Chiffretext abgeleitet werden und die Wahrscheinlichkeit eines Hash-Konflikts ist relativ gering. Diese beiden Punkte gewährleisten die Zuverlässigkeit des Hash-Algorithmus als sichere Verschlüsselungsmethode.

Warum können Hashing-Algorithmen Hash-Kollisionen nicht vollständig vermeiden, sondern nur minimieren?

Das Taubennest-Prinzip besagt, dass wenn 11 Tauben in 10 Taubenkäfige fliegen, dann müssen sich in einem Taubenkäfig 2 oder mehr Tauben befinden. Dann hat der Hash-Wert eine feste Länge, was bestimmt, dass der Hash-Wert ausgeschöpft werden kann, aber theoretisch sind die Originaldaten unendlich, sodass es zu einem Hash-Konflikt kommen kann.

Dieses Anwendungsszenario verwendet die Funktionen 1 und 3 des Hash-Algorithmus, von denen 3 dafür sorgen, dass das Passwort in Vorwärtsrichtung nur sehr schwer zu knacken ist (am Beispiel von MD5 beträgt die Länge des Hash-Werts 128 Bit, und das gibt es auch). 2^128 unterschiedlich Der Hashwert ist sehr schwer zu knacken.

Es gibt keine absolute Sicherheit im Sicherheitsbereich, es gibt jedoch immer noch Möglichkeiten, es zu knacken. Beispielsweise können gängige Passwörter leicht geknackt werden.

Also verwenden wir im Allgemeinen einen Salted-Hash-Algorithmus zur sicheren Verschlüsselung. Die Salting-Methode muss streng vertraulich behandelt werden, was die Schwierigkeit und die Kosten des Knackens erheblich erhöht.

2.2 Eindeutiges Flag

Wenn wir überprüfen, ob zwei Dateien gleich sind, können wir nicht einfach anhand des Dateinamens beurteilen. Weil es zu häufig vorkommt, dass Dateien mit demselben Namen vorhanden sind.

Wir können nach bestimmten Regeln einige Binärdaten aus einer großen Datei entnehmen und einen Hash-Algorithmus verwenden, um einen Hash-Wert als eindeutige Kennung der Datei zu erhalten. Auf diese Weise müssen dieselben Dateien denselben Hash-Wert haben, dh dieselbe eindeutige Kennung. Verschiedene Dateien haben mit hoher Wahrscheinlichkeit unterschiedliche eindeutige Kennungen von Hash-Werten Vergleichen Sie alle Binärdaten der beiden Dateien im Detail, um festzustellen, ob es sich um dieselbe Datei handelt. Die Wahrscheinlichkeit, dass dieses Ereignis eintritt, ist zu gering. Diese Lösung gewährleistet jedoch sowohl Effizienz als auch Zuverlässigkeit.

Dieses Anwendungsszenario nutzt die Features 2 und 3 des Hash-Algorithmus.

2.3 Datenüberprüfung

Im P2P-Download-Protokoll laden wir verschiedene Teile desselben Films von verschiedenen Computern herunter und stellen den Film dann auf unserem eigenen Computer zusammen. Wenn beim Herunterladen eines Teils des Films ein Fehler auftritt oder der Inhalt manipuliert wird, kann es zu Downloadfehlern oder Viren kommen.

Also hashen wir zuerst alle Teile und speichern sie in der Seed-Datei. Nachdem alle Teile heruntergeladen wurden, hashen wir alle Teile, um den Hash-Wert zu erhalten, und vergleichen ihn dann mit dem in der Seed-Datei, um zu überprüfen, ob die Datei vollständig ist.

Dieses Anwendungsszenario nutzt die Features 2 und 4 des Hash-Algorithmus.

2.4 Hash-Funktion

Dieses Szenario wurde bereits vorgestellt, als wir über Hash-Tabellen sprachen. In diesem Szenario sind die Anforderungen an Feature 1 nicht sehr hoch. Die Anforderung an Feature 2 besteht darin, dass die Hashwerte möglichst gleichmäßig verteilt sein sollten. Feature 3 kann bis zu einem gewissen Grad auch Konflikte akzeptieren, die durch gelöst werden können Die Verwendung der offenen Adressierungsmethode und der Zipper-Methode ist anspruchsvoller und erfordert mehr Leistung.

2.5 Lastausgleich

Es gibt viele Lastausgleichsalgorithmen, z. B. Abfragen, zufällige, gewichtete Abfragen usw., aber das Ziel besteht darin, einen sitzungsgebundenen Lastausgleichsalgorithmus zu implementieren, dh alle Lastausgleichsalgorithmen sind gleich Client während einer Sitzung. Anfragen werden alle an denselben Server weitergeleitet.

Wir können die IP-Adresse oder Sitzungs-ID des Clients hashen und den erhaltenen Hash-Wert mit der Anzahl der Server modulieren. Der endgültige Wert ist der Server, der weitergeleitet werden muss, damit der Zweck der Sitzungsbindung erreicht werden kann.

2.6 Daten-Sharding

Wenn wir riesige Datenmengen verarbeiten müssen, kann ein einzelner Server eine so große Datenmenge nicht laden und berechnen. Dann müssen wir die riesigen Datenmengen gleichmäßig auf N Server verteilen, um sie parallel zu verarbeiten Wie wäre es mit einer gleichmäßigen Aufteilung auf N Server?

Wir führen eine Hash-Berechnung der Daten durch und verwenden den erhaltenen Hash-Wert modulo zur Anzahl der Server N. Daten mit demselben Ergebnis werden demselben Server zugewiesen und diesem Server zur Verarbeitung übergeben. N Server verarbeiten riesige Datenmengen parallel und führen die Ergebnisse schließlich zusammen.

2.7 Verteilter Speicher

Speichern Sie große Datenmengen in einem verteilten Cache oder einer verteilten Datenbank. Die Idee des Ausleihens ähnelt dem oben genannten Daten-Sharding. Was ist jedoch zu tun, wenn die Anzahl der ursprünglich eingestellten Server nicht ausreicht?

Es kann nicht durch einfaches Hinzufügen einiger Maschinen gelöst werden. Dies zerstört die Modulo-Operation des Hash-Werts, führt zu einer Cache-Penetration und verursacht einen Lawineneffekt. Ebenso kann das gleiche Problem auftreten, wenn ein Maschinenfehler behoben wird. Zu diesem Zeitpunkt müssen wir einen konsistenten Hash-Algorithmus verwenden, um dieses Problem zu lösen.

Der konsistente Hashing-Algorithmus erstellt einfach einen Hash-Ring mit 2^32 Knoten und hasht die Server-IP und Dateien auf die entsprechenden Knoten. Der erste Server, auf den alle Dateien im Uhrzeigersinn treffen, ist der Server, auf dem sie gespeichert sind. Auf diese Weise kann beim Hinzufügen oder Löschen eines Servers die Anzahl der betroffenen Dateien kontrolliert werden und es kommt nicht zu einer globalen Lawine.

Verstehen Sie den Hash-Algorithmus und Anwendungsszenarien in einem Artikel

Hash-Ring

Wenn jedoch die Server-IP dem Hash-Ring zugeordnet wird, entsteht mit einer gewissen Wahrscheinlichkeit ein Hash Das Problem des Ringversatzes wird zu einer extrem ungleichmäßigen Verteilung der Dateien auf dem Server führen und zu einem Szenario ausarten, das beim Hinzufügen oder Löschen von Servern zu Beginn leicht einen Lawineneffekt verursacht.

Verstehen Sie den Hash-Algorithmus und Anwendungsszenarien in einem Artikel

Verzerrung des Hash-Rings

Wir können diesen Servern künstlich eine Reihe virtueller Knoten hinzufügen, sodass alle Serverknoten vorhanden sind in Gleichmäßig auf dem Hash-Ring verteilt.

Verstehen Sie den Hash-Algorithmus und Anwendungsszenarien in einem Artikel

Hash-Ring mit virtuellen Knoten

3. Zusammenfassung

Verwendungsszenarien des Hash-Algorithmus Far Darüber hinaus gibt es auch CRC-Prüfungen.

Das obige ist der detaillierte Inhalt vonVerstehen Sie den Hash-Algorithmus und Anwendungsszenarien in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Golang-Funktions-Hash, crc32-, md5- und sha1-Berechnungsmethoden Golang-Funktions-Hash, crc32-, md5- und sha1-Berechnungsmethoden May 18, 2023 am 08:12 AM

Golang ist eine neue Hochleistungsprogrammiersprache mit einer umfangreichen Standardbibliothek und integrierten Funktionen. Dazu gehören Hash-Funktionen, mit denen Hash-Werte von Daten zur Dateiverifizierung, Datenverifizierung usw. generiert werden können. In diesem Artikel werden die Berechnungsmethoden und Anwendungen der häufig verwendeten Funktionen hash, crc32, md5 und sha1 in Golang vorgestellt. 1. Hash-Funktion Die Hash-Funktion von Golang umfasst eine Vielzahl von Hash-Algorithmen wie SHA-1, MD5, SHA-224, SHA-256, SH

So implementieren Sie die Redis-Hash-Operation in PHP So implementieren Sie die Redis-Hash-Operation in PHP May 30, 2023 am 08:58 AM

Hash-Operation // Weisen Sie den Feldern in der Hash-Tabelle Werte zu. Gibt 1 bei Erfolg und 0 bei Fehler zurück. Wenn die Hash-Tabelle nicht vorhanden ist, wird die Tabelle zuerst erstellt und dann der Wert zugewiesen. Wenn das Feld bereits vorhanden ist, wird der alte Wert überschrieben. $ret=$redis->hSet('user','realname','jetwu');//Den Wert des angegebenen Felds in der Hash-Tabelle abrufen. Wenn die Hash-Tabelle nicht existiert, geben Sie „false“ zurück. $ret=$redis->hGet('user','rea

Lesevorgänge für Golang-Dateien: Tipps zum schnellen Lesen großer Dateien Lesevorgänge für Golang-Dateien: Tipps zum schnellen Lesen großer Dateien Jan 19, 2024 am 08:33 AM

Lesevorgang für Golang-Dateien: Tipps zum schnellen Lesen großer Dateien. Es sind spezifische Codebeispiele erforderlich. In der Golang-Programmierung ist das Lesen von Dateien ein sehr häufiger Vorgang. Wenn jedoch große Dateien gelesen werden müssen, ist dies normalerweise ein zeit- und ressourcenintensiver Vorgang. Daher ist das schnelle Lesen großer Dateien ein diskussionswürdiges Thema. In diesem Artikel wird erläutert, wie Sie die Funktionen von Golang und einige Techniken zum schnellen Lesen großer Dateien verwenden, und es werden spezifische Codebeispiele bereitgestellt. Verwenden von bufio zum Lesen von Dateien in Golang, Lesen von Dateien

Was sind die am häufigsten verwendeten Hash-Algorithmus-Tools in Java-Funktionsbibliotheken? Was sind die am häufigsten verwendeten Hash-Algorithmus-Tools in Java-Funktionsbibliotheken? Apr 30, 2024 pm 03:21 PM

In der Java-Funktionsbibliothek kann die MessageDigest-Klasse für Hash-Algorithmen verwendet werden und bietet Implementierungen von MD5, SHA und anderen Hash-Algorithmen, einschließlich: 1. MD5-Algorithmus: Verwenden Sie MessageDigest.getInstance("MD5"), um eine Instanz abzurufen. 2.SHA-Algorithmus: einschließlich SHA-1, SHA-256, SHA-384 und SHA-512, verwenden Sie MessageDigest.getInstance("SHA-256"), um die Instanz abzurufen. 3. Andere Hashing-Algorithmen: Sie können Bibliotheken von Drittanbietern verwenden, z. B. Algorithms.MessageDigest oder die BouncyCastle-Bibliothek.

Laravel-Entwicklung: Wie generiert man einen Passwort-Hash mit Laravel Hash? Laravel-Entwicklung: Wie generiert man einen Passwort-Hash mit Laravel Hash? Jun 17, 2023 am 10:59 AM

Laravel ist derzeit eines der beliebtesten PHP-Webframeworks und bietet Entwicklern viele leistungsstarke Funktionen und Komponenten, zu denen auch LaravelHash gehört. LaravelHash ist eine PHP-Bibliothek für Passwort-Hashing, mit der Sie Passwörter schützen und die Benutzerdaten Ihrer Anwendung sicherer machen können. In diesem Artikel erfahren wir, wie LaravelHash funktioniert und wie man es zum Hashen und Überprüfen von Passwörtern verwendet. Vorkenntnisse im Lernen von Lara sind erforderlich

So implementieren Sie den MD5-Hash-Algorithmus mit Java So implementieren Sie den MD5-Hash-Algorithmus mit Java Sep 21, 2023 am 08:31 AM

So verwenden Sie Java zum Implementieren des MD5-Hash-Algorithmus MD5 (MessageDigestAlgorithm5) ist ein häufig verwendeter Hash-Algorithmus, der zum Verschlüsseln und Überprüfen von Daten verwendet wird. In Java können wir die MessageDigest-Klasse verwenden, um den MD5-Hash-Algorithmus zu implementieren. Im Folgenden finden Sie einen einfachen Beispielcode, der zeigt, wie der MD5-Algorithmus mit Java implementiert wird. importjava.security.MessageDigest;

Implementieren Sie Ihren eigenen SHA-256-Hashing-Algorithmus in PHP! Implementieren Sie Ihren eigenen SHA-256-Hashing-Algorithmus in PHP! May 23, 2022 am 11:39 AM

Hash wird auch „Hash“ genannt. Er empfängt einen beliebigen Satz von Eingabeinformationen beliebiger Länge und wandelt ihn über den Hash-Algorithmus in einen Datenfingerabdruck fester Länge um. Im Allgemeinen kann ein Hash als Nachrichtenauszug verstanden werden.

Die zugrunde liegende Python-Technologie enthüllt: So implementieren Sie eine Hash-Tabelle Die zugrunde liegende Python-Technologie enthüllt: So implementieren Sie eine Hash-Tabelle Nov 08, 2023 am 11:53 AM

Die zugrunde liegende Python-Technologie wurde enthüllt: So implementieren Sie eine Hash-Tabelle. Eine Hash-Tabelle ist eine sehr häufige und wichtige Datenstruktur im Computerbereich. Sie kann eine große Anzahl von Schlüssel-Wert-Paaren effizient speichern und durchsuchen. In Python können wir Hash-Tabellen mithilfe von Wörterbüchern verwenden, aber nur wenige Menschen verstehen die Implementierungsdetails im Detail. In diesem Artikel wird die zugrunde liegende Implementierungstechnologie von Hash-Tabellen in Python erläutert und spezifische Codebeispiele aufgeführt. Die Kernidee einer Hash-Tabelle besteht darin, Schlüssel über eine Hash-Funktion einem Array fester Größe zuzuordnen, anstatt sie einfach nacheinander zu speichern.

See all articles