для веб-сервера C++ Мне нужно сгенерировать идентификаторы сеанса. Я подумал о том, чтобы использовать какое-то случайное число и хеш с начальным IP-адресом сессии и, возможно, временной меткой.Как сгенерировать идентификатор безопасного сеанса
Будет ли это давать разумный неопознанный идентификатор? Каким будет хороший алгоритм случайных генераторов (наиболее предпочтительный вариант, реализованный с помощью ускорения-случайного)?
вид касается Торстен
Мое решение теперь выглядит следующим образом:
std::string secure_session_generator::operator()(const char* /* network_connection_name */)
{
std::stringstream out;
out << std::hex << distribution_(generator_);
return out.str();
}
с членами являются конструктором по умолчанию:
boost::random::random_device generator_;
boost::random::uniform_int_distribution<boost::uint_least64_t> distribution_;
Я просто пошел, чтобы проверить это сам, и столкнулся с кучей проблем с версированием в случайной библиотеке Boost, у вас не должно быть проблемы, если вы используете новейшую (я надеюсь). Но если вы не хотите использовать ускоренную библиотеку, вы можете реализовать это достаточно просто, используя rand() и srand() для генерации чисел и изменения их до читаемых значений (при условии, что это сдержанность), это может быть не большинство «безопасных», но это действительно зависит от того, сколько вам действительно нужно. – Trickfire
Я собираюсь использовать решение для повышения, поскольку я слышал, что реализация std :: rand() может не использоваться для таких целей. Спасибо за Ваш ответ. –
Вы были бы правы, некоторые реализации rand() выполняются довольно плохо, и использование мода может немного исказить ваше распределение, не говоря уже о посеве, время может резко снизить возможные значения семян. Все зависит от того, насколько это действительно важно для вас. – Trickfire