4

C ++ Webサーバーの場合、セッションIDを生成する必要があります。ある種の乱数を使用して、セッションの初期IPアドレスとおそらくタイムスタンプを使用してハッシュすることを考えました。

これにより、推測できない妥当なIDが生成されますか?優れたランダムジェネレータアルゴリズム(ブーストランダムによって実装される最も好ましいアルゴリズム)は何でしょうか?

Torstenよろしくお願いします

私のソリューションは次のようになります。

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_;
4

1 に答える 1

4

ここで例を使用できます:ブーストの例。次に、サイズを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を使用せずに、IPの代わりにrand()をポンプバックすることもできます。必ず、srandに何かをシードしてください。

また、私は暗号学者ではありませんので、ご利用はご自身の責任で行ってください。

于 2012-07-02T09:21:35.600 に答える