Как хэшировать std :: string? - PullRequest
14 голосов
/ 06 ноября 2011

Я создаю небольшую утилиту, которая поможет мне запомнить пароли при повторении.Я хотел бы вводить пароль, который запоминается только один раз в день, а не перед каждым сеансом.Конечно, я не буду хранить сам пароль, но с удовольствием сохраню его хэш.

Итак, каковы самые простые способы получить хэш из std::string с помощью стандартной библиотеки C ++?

Ответы [ 3 ]

23 голосов
/ 06 ноября 2011

Для быстрого решения без использования внешних библиотек вы можете использовать hash<std::string> для хеширования string s.Это определяется включением заголовочных файлов hash_map или unordered_map (или некоторых других тоже).

#include <string>
#include <unordered_map>

hash<string> hasher;

string s = "heyho";

size_t hash = hasher(s);

Если вы решите, что хотите дополнительную безопасность SHA, вам не нужно загружать большиеБиблиотека Crypto ++, если вам не нужны все остальные ее функции;В Интернете существует множество автономных реализаций, просто выполните поиск по запросу «sha реализация c ++».

11 голосов
/ 18 сентября 2016

используя c ++ 11, вы можете:

#include <string>
#include <unordered_map>

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

подробнее здесь .

1 голос
/ 06 ноября 2011

Вы можете использовать хэш функтора STL .Посмотрите, есть ли у вашей библиотеки STL или нет.

Обратите внимание, что эта возвращает size_t, поэтому диапазон равен numeric_limits<size_t>::min() numeric_limits<size_t>::max()Вам придется использовать SHA или что-то еще, если это не приемлемо.

...