4
我必須生成會話ID。我想到了使用某種隨機數和哈希值與會話的初始IP地址,也許是一個時間戳。如何爲C++ Web服務器生成安全會話ID
這會產生一個合理的不可猜測的ID嗎?什麼是一個好的隨機生成器算法(最好用一個boost-random來實現)?
親切的問候 託斯滕
我的解決方案,現在看起來像:
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隨機庫版本問題,如果你使用最新的版本(我希望),你應該沒有問題。但是如果你不想使用boost隨機庫,你可以通過使用rand()和srand()生成數字並將它們修改爲可讀值(假設這是一種限制)來相當簡單地實現它,但它可能不是最「安全」的,但這取決於你真正需要多少。 – Trickfire
我打算使用boost解決方案,因爲我聽說std :: rand()實現可能不適用於此目的。感謝您的回答。 –
你會是對的,一些rand()實現週期相當糟糕,而使用mod可能會使你的分佈略微偏移,更不用說與時間一起播種可以大幅降低可能的種子值。這一切都取決於你需要它的真正隨機性。 – Trickfire