c为psudo随机数生成器生成一个好的随机种子

我正在尝试为psudo-random数字生成器生成一个好的随机种子.我以为我会得到专家的意见.如果这是一种不好的方式,或者有更好的方法,请告诉我.

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <ctime>

unsigned int good_seed()
{
    unsigned int random_seed, random_seed_a, random_seed_b; 
    std::ifstream file ("/dev/random", std::ios::binary);
    if (file.is_open())
    {
        char * memblock;
        int size = sizeof(int);
        memblock = new char [size];
        file.read (memblock, size);
        file.close();
        random_seed_a = int(memblock);
        delete[] memblock;
    }// end if
    else
    {
        random_seed_a = 0;
    }
    random_seed_b = std::time(0);
    random_seed = random_seed_a xor random_seed_b;
    return random_seed;
} // end good_seed()
最佳答案
从/ dev / random读取的代码似乎是错误的:你是C风格将你的字符缓冲区的地址转换为random_seed_a(这里为C cast插件)并忽略你实际从/ dev / random读取的任何内容(try * reinterpret_cast< INT * GT(memblock). / dev / random应该已经是一个很好的熵源,所以如果它可用,不要将该值与任何其他数据一起污染,只需将其直接用作种子即可.如果/ dev / random中没有足够的数据,我只会依赖于时间并单独使用它而不是用某些东西进行xor’ing.

转载注明原文:c为psudo随机数生成器生成一个好的随机种子 - 代码日志