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/

10-09 08:39