web-dev-qa-db-fra.com

Comment Hash STD :: String?

Je fais un petit utilitaire pour m'aider à me souvenir des mots de passe par la répétition. J'aimerais entrer un mot de passe à rappeler une seule fois tous les jours et non avant chaque session. Bien sûr, je ne stockerais pas un mot de passe lui-même, mais je serais heureux de stocker son hachage.

Donc, quels sont les moyens les plus faciles d'obtenir un hasch de std::string Utilisation de la bibliothèque standard C++?

18
Septagram

Pour une solution rapide n'impliquant aucune bibliothèque externe, vous pouvez utiliser hash<std::string> à hachage strings. Il est défini en incluant les fichiers d'en-tête hash_map ou unordered_map (ou quelques autres aussi).

#include <string>
#include <unordered_map>

hash<string> hasher;

string s = "heyho";

size_t hash = hasher(s);

Si vous décidez que vous souhaitez que la sécurité supplémentaire de SHA, vous n'avez pas à télécharger la grande bibliothèque Crypto ++ si vous n'avez pas besoin de toutes ses autres fonctionnalités; Il existe de nombreuses implémentations autonomes sur Internet, il suffit de rechercher une "mise en œuvre SHA C++".

24
Seth Carnegie

utilisation de C++ 11, vous pouvez:

#include <string>
#include <unordered_map>

std::size_t h1 = std::hash<std::string>{}("MyString");
std::size_t h2 = std::hash<double>{}(3.14159);

en voir plus ICI .

12
Ou Wei

Vous pouvez utiliser le STL FUNCTOR HASH . Voyez si votre STL LIB l'a ou non.

Notez que celui-ci renvoie un size_t, Donc la plage est numeric_limits<size_t>::min()numeric_limits<size_t>::max(). Vous devrez utiliser SHA ou quelque chose si ce n'est pas acceptable ..

1
Kashyap