L'analyse de chaînes en C ++ avec un hachage

Hashes sont une exigence de sécurité important pour les applications d'aujourd'hui. UN hachis crée un équivalent numérique unique de toute chaîne que vous nourrissez. Théoriquement, vous ne pouvez pas dupliquer le nombre que le hachage crée en utilisant une autre chaîne. Un hachage est irréversible - il est pas le même que le chiffrement et le déchiffrement.

Une utilisation commune de hachage est d'envoyer des mots de passe à partir d'un client à un serveur. Le client convertit le mot de passe de l'utilisateur dans un hachage numérique et envoie ce nombre au serveur. Le serveur vérifie le nombre, pas le mot de passe. Même si les gens sont à l'écoute, ils ont aucun moyen de vérifier le mot de passe à partir de la numérotation par conséquent, ils ne peuvent pas voler le mot de passe pour une utilisation avec l'application cible.

La dernière version de Code :: Blocks fournit un excellent support pour les hachages. Toutefois, afin de l'utiliser, vous devez activer le support de C ++ 11 extensions. Après avoir activé le soutien nécessaire, vous pouvez créer la HashingStrings exemple montré ici pour démontrer l'utilisation de tables de hachage.

#comprendre #comprendre using namespace std-int main () {hachage MyHash-cout lt; lt; "Le hachage de " Bonjour tout le monde "est:" lt; lt; endl-cout lt; lt; MyHash ("Bonjour tout le monde») lt; lt; endl-cout lt; lt; "tandis que le hachage de " Goodbye Cruel World "est:" lt; lt; endl-cout lt; lt; MyHash ("Goodbye Cruel World") lt; lt; endl-retour 0-}

L'exemple commence par créer un objet de fonction de hachage, MyHash. Vous utilisez cet objet de fonction pour convertir le texte d'entrée à une valeur de hachage. L'objet de la fonction fonctionne comme toute autre fonction, de sorte que vous pourrait fournir le texte d'entrée comme MyHash ("Bonjour tout le monde»). HACHAGES toujours sortie exactement la même valeur donnée une entrée particulière. Par conséquent, vous devriez voir la sortie suivante de cet exemple.

Le hachage de «Bonjour tout le monde" est: 4644931while le hachage de "Goodbye Cruel World" est: 4644988

Hashes ont des utilisations autres que les exigences de sécurité. Par exemple, vous pouvez créer un conteneur qui repose sur un hachage de faire localiser une valeur particulière facile. Dans ce cas, vous utilisez une paire clé / valeur dans un carte hachage. La STL utilise une réelle hash_maplt;> modèle.




Cependant, la bibliothèque standard remplace hash_maplt;> avec unordered_maplt;>, ce qui signifie que vous devez activer l'extension du soutien de C pour cet exemple. Sauf pour le nom du modèle, vous pouvez réellement utiliser les deux modèles de manière interchangeable, mais en utilisant le hash_maplt;> modèle affiche un message d'avertissement dans les nouvelles versions de Code :: Blocks.

La HashMap exemple ci-dessous illustre comment créer une carte de hachage:

#comprendre #comprendre #include using namespace std-struct eqstr {bool operator () (const char * s1, const char * s2) const {return strcmp (S1, S2) == 0 -}} - int main () {unordered_map, eqstr> Couleurs-Colors 1-Colors ["vert"] = 2 couleurs 3 couleurs 4 couleurs 5-couleurs ["Purple"] = ["brique"] = ["Teal"] = ["bleu"] = ["Brown"] = 6-couleurs ["GrisClair"] = 7-cout lt; lt; "Brown =" lt; lt; Couleurs ["Brown"] lt; lt; endl-cout lt; lt; "Brick =" lt; lt; Couleurs ["brique"] lt; lt; endl - // Cette clé se trouve pas dans la carte de hachage, de sorte qu'il renvoie une valeur // de 0.cout lt; lt; "Rouge =" lt; lt; Couleurs ["rouge"] lt; lt; endl-}

Un (dièse) carte à puces exige quatre entrées:

  • Type de clé

  • Type de données

  • Fonction de hachage

  • Clé égalité

Les trois premières entrées sont simples. Dans ce cas, le code utilise une chaîne comme un type de clé, une valeur entière comme un type de données, et hachis que la fonction de hachage.

La classe Key égalité est un peu plus complexe. Vous devez fournir la carte de hachage d'un moyen de déterminer l'égalité. Dans ce cas, le code compare la chaîne d'entrée avec la chaîne stockée comme la clé.

La eqstr Structure effectue la tâche consistant à comparer la chaîne d'entrée de la clé. La structure doit retourner une valeur booléenne, afin que le code compare le strcmp fonction à 0. Lorsque les deux sont égaux, ce qui signifie les chaînes sont égales, eqstr retours vrai.

L'exemple qui se passe pour vérifier les trois couleurs, dont deux seulement apparaissent dans le plan de hachage Couleurs. Dans les deux premiers cas, vous voyez la valeur attendue. Dans le troisième cas, vous voyez 0, ce qui indique que Couleurs ne contient pas la touche souhaitée.

Toujours réserve 0 comme un indicateur d'erreur lorsque vous utilisez une carte de hachage, parce que la carte de hachage sera toujours retourner une valeur, même si elle ne contient pas la touche souhaitée. La sortie de cet exemple est la suivante:

Brown = 6Brick = 4Red = 0

» » » » L'analyse de chaînes en C ++ avec un hachage