4

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");
    }

还是这个循环很傻,我应该在第一次尝试后扔掉?

谢谢。

4

1 回答 1

0

/dev/random基本上,如果(或)没有足够的熵,/dev/urandom那么RAND_bytes将失败。没有简单的方法可以确定呼叫何时会失败,但这不太可能。

于 2013-02-06T15:54:26.787 回答