RAND_bytes 的文档声称如果生成的随机字节是可预测的,则该函数可能会返回错误。我的问题是这样的错误有多频繁?
可以在有限循环中调用 RAND_bytes(比如 5 次尝试)然后抛出异常是解决这个问题的合理方法,或多或少像这样:
unsigned char random_bytes[4];
uint8_t attempts = 0;
while(RAND_bytes(random_bytes,sizeof(random_bytes)) != 1 && ++attempts != 5 ) { }
if( attempts == 5)
{
throw std::runtime_error("random bytes too predictable after multiple attempts");
}
或者这个循环是愚蠢的,我应该在第一次尝试后抛出?
谢谢。
最佳答案
基本上,如果 /dev/random
(或 /dev/urandom
)没有足够的熵,那么 RAND_bytes
就会失败。没有简单的方法可以确定调用何时会失败,但这不太可能。
关于c++ - 由于缺乏不可预测性,OpenSSl RAND_bytes 返回错误的频率如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14190459/