对于C ++ Web服务器,我必须生成会话ID。我想过使用某种随机数和哈希值来表示会话的初始IP地址,也许是一个时间戳。
这会产生合理的不可识别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_;
答案 0 :(得分:3)
您可以在此处使用示例:Boost example。然后只需将大小增加到更适合64个字符或某事的会话ID。这样你就不必在散列或任何东西上使用计算,而且它已经可读了。
或者不使用boost-random而只使用ctime和stdio.h
string getRandom(int ip)
{
srand(time(NULL) + ip + rand());
stringstream ss;
for(int i = 0;i < 64;i++)
{
int i = rand() % 127;
while(i < 32)
i = rand() % 127;
ss << char(i);
}
return ss.str();
}
或者,在不使用IP的情况下,你可以用一个rand()来代替IP,只需要确保用某种东西播种srand。
另外,无论如何,我不是密码学家,所以使用是你自己的风险。