从/dev/urandom读取时未返回足够的字节

kq0g1dla  于 2022-09-21  发布在  Unix
关注(0)|答案(1)|浏览(318)

在尝试编写一次性Pad实现时,大多数情况下,我最终得到的密钥大小都比纯文本短。

我已经尝试了多个API,如/dev/(u)random中的read()fread(),Linux getrandom(),甚至OpenSSLRAND_bytes()。每当我检查从这些函数返回的长度时,它都会给出正确的字节数,但字符串本身(以及密钥文件)在某种程度上要短一些。

我还尝试了不同的数据类型,如intuint8_twchar_t,以及循环,但无济于事。

char *genkey(const size_t length)
{
    char *key;

    key = calloc(length, sizeof *key);
    if (!key) ERROR("could not allocate memoryn");

    getrandom(key, (length * sizeof *key), 0);

    return key;
}
xienkqul

xienkqul1#

随机字节中至少有一个是0-因此,如果您将其作为字符串进行测量,它通常会比您请求的长度短。

您将从随机数生成器中获得一个字节数组,而不是一个字符串。

相关问题