运维开发网

安全性 – 如何生成安全会话ID

运维开发网 https://www.qedev.com 2020-07-05 19:07 出处:网络 作者:运维开发网整理
对于C Web服务器,我必须生成会话ID.我想过使用某种随机数和哈希值来表示会话的初始IP地址,也许是一个时间戳. 这会产生合理的不可识别的ID吗?什么是一个好的随机生成器算法(最优选的一个由boost-random实现)? 亲切的问候 托斯滕 我现在的解决方案如下: std::string secure_session_generator::operator()( const char* /*
对于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_;
您可以使用此处的示例: 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,只需确保用某种东西来种子.

另外,无论如何,我不是密码学家,所以使用是你自己的风险.

0

精彩评论

暂无评论...
验证码 换一张
取 消