我的以下方法应该使用OpenSSL生成随机数。这是正确和充分的吗?或者你看到它有任何问题吗?
vector<unsigned char> generateBytes(const unsigned char* seed, const size_t length)
{
if (seed != nullptr)
RAND_seed(seed, length); // No error handling is necessary here??
else
/*Do I need to do something here to correctly autoseed the PRNG */
vector<unsigned char> result(length);
if (!RAND_bytes(result.data(), length)) {
throw Exception("Could not get random bytes.");
}
return result;
}
我对标准做法也有以下疑虑:
即使使用默认的SSLeay引擎,通常也会使用Engine API吗?
通常的做法是从/ dev / random这样的熵池中自动播种PRNG,而不管OpenSSL在初始化时如何自动播种?
将ENTROPY_NEEDED设置为某个值是否常见?