Parsing Streicher in C ++ Mit einem Hash

Hashes sind eine wichtige Sicherheitsanforderungen für Anwendungen heute. EIN Hasch schafft eine einzigartige numerische Entsprechung jeder Zeichenfolge Sie es füttern. Theoretisch können Sie die Zahl nicht duplizieren, die die Hash erzeugt durch eine andere Zeichenfolge verwendet wird. Ein Hash ist nicht umkehrbar - es ist nicht die gleiche wie die Verschlüsselung und Entschlüsselung ist.

Eine häufige Verwendung für Hashes ist Passwörter von einem Client an einen Server zu senden. Der Kunde setzt das Kennwort des Benutzers in einen numerischen Hash und sendet diese Zahl auf dem Server. Der Server überprüft die Anzahl, nicht das Passwort. Selbst wenn die Menschen hören in, haben sie keine Möglichkeit, das Passwort von dem Zahlen- zu ermitteln, daher können sie das Passwort für die Verwendung mit der Zielanwendung nicht stehlen.

Die neueste Version von Code :: Blocks bietet eine hervorragende Unterstützung für Hashes. Um jedoch, es zu benutzen, müssen Sie die Unterstützung für C ++ 11 Erweiterungen ermöglichen. Nachdem Sie die gewünschte Unterstützung zu aktivieren, können Sie die erstellen HashingStrings hier gezeigten Beispiel die Verwendung von Hashes zu demonstrieren.

#einschließen #einschließen using namespace std-int main () {Hash MyHash-cout lt; lt; "Der Hash von " Hallo Welt "ist:" lt; lt; Endl-cout lt; lt; MyHash ( "Hallo Welt") lt; lt; Endl-cout lt; lt; ", Während der Hash von " Goodbye Cruel World "ist:" lt; lt; Endl-cout lt; lt; MyHash ( "Goodbye Cruel World") lt; lt; Endl-return 0-}

Das Beispiel beginnt mit einer Hash-Funktion Objekt zu erzeugen, MyHash. Mit dieser Funktion können Objekt Eingabetext auf einen Hash-Wert zu konvertieren. Die Funktion Objekt funktioniert genauso wie jede andere Funktion, so dass Sie könnte die Eingabe von Text als MyHash ( "Hallo Welt"). Hashes immer den gleichen Wert genau Ausgabe eine bestimmte Eingabe gegeben. Daher sollten Sie die folgende Ausgabe aus diesem Beispiel zu sehen.

Der Hash von "Hallo Welt" ist: 4644931while der Hash von "Goodbye Cruel World" ist: 4.644.988

Hashes haben andere Anwendungen als Sicherheitsanforderungen. Zum Beispiel können Sie einen Container erstellen, die auf einem Hash verlässt sich leichter einen bestimmten Wert zu machen, zu lokalisieren. In diesem Fall verwenden Sie einen Schlüssel / Wert-Paar in ein Hash-Karte. Die STL verwendet einen tatsächlichen hash_maplt;> Vorlage.

Allerdings ersetzt die Standard Library hash_maplt;> mit unordered_maplt;>, was bedeutet, dass Sie C ++ Erweiterung Unterstützung für dieses Beispiel aktivieren. Mit Ausnahme der Template-Namen, können Sie tatsächlich die beiden Vorlagen verwenden austauschbar, wobei jedoch die hash_maplt;> Vorlage wird eine Warnmeldung in neueren Versionen von Code :: Blocks anzuzeigen.

Das HashMap Beispiel nächstes zeigt gezeigt, wie eine Hash-Map zu erstellen:

#einschließen #einschließen # include using namespace std-Strukt eqstr {bool operator () (const char * s1, const char * s2) const {return strcmp (s1, s2) == 0 -}} - int main () {unordered_map, eqstr> Farben-Farben [ "Blue"] = 1-Farben [ "Green"] = 2-Farben [ "Teal"] = 3-Farben [ "Brick"] = 4-Farben [ "Purple"] = 5-Farben [ "Brown"] = 6-Farben [ "Lightgray"] = 7-cout lt; lt; "Brown =" lt; lt; Farben [ "Brown"] lt; lt; Endl-cout lt; lt; "Brick =" lt; lt; Farben [ "Brick"] lt; lt; Endl - // Dieser Schlüssel ist nicht in der Hash-Karte, so dass es gibt einen // Wert von 0.cout lt; lt; "Red =" lt; lt; Farben [ "Red"] lt; lt; endl-}

Eine ungeordnete (hash) Karte erfordert vier Eingänge:

  • Schlüsselart

  • Datentyp

  • Hashing-Funktion

  • Gleichheit Schlüssel

Die ersten drei Eingänge sind unkompliziert. In diesem Fall verwendet der Code einen String, der als Schlüssel-Typ, einem ganzzahligen Wert als ein Datentyp, und Hasch wie die Hash-Funktion.

Die Gleichstellung der Key-Klasse ist ein wenig komplexer. Sie müssen die Hash-Karte mit einem Mittel zur Gleichheit Bestimmung bereitzustellen. In diesem Fall vergleicht der Code die Eingabezeichenfolge mit der Zeichenfolge als Schlüssel gespeichert.

Das eqstr Struktur erfüllt die Aufgabe, auf die Taste, um die Eingabezeichenfolge zu vergleichen. Die Struktur muss einen Booleschen Wert zurück, so dass der Code der vergleicht strcmp Funktion auf 0. Wenn die beiden gleich sind, dh die Strings gleich sind, eqstr kehrt zurück wahr.

Das Beispiel geht für die drei Farben zu überprüfen, von denen nur zwei in der Hash-Karte erscheinen Farben. In den ersten beiden Fällen sehen Sie den Erwartungswert. Im dritten Fall, sehen Sie 0, was anzeigt, dass Farben nicht den gewünschten Schlüssel enthalten.

Immer Reserve 0 als Fehleranzeige, wenn eine Hash-Karte zu verwenden, da der Hash-Karte Wert immer zurückkehren wird, auch wenn es nicht die gewünschte Taste enthält. Die Ausgabe dieses Beispiel ist:

Braun = 6Brick = 4RED = 0

Menü