在尝试编写一次性Pad实现时,大多数情况下,我最终得到的密钥大小都比纯文本短。
我已经尝试了多个API,如/dev/(u)random
中的read()
和fread()
,Linux getrandom()
,甚至OpenSSLRAND_bytes()
。每当我检查从这些函数返回的长度时,它都会给出正确的字节数,但字符串本身(以及密钥文件)在某种程度上要短一些。
我还尝试了不同的数据类型,如int
、uint8_t
和wchar_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;
}
1条答案
按热度按时间xienkqul1#
随机字节中至少有一个是0-因此,如果您将其作为字符串进行测量,它通常会比您请求的长度短。
您将从随机数生成器中获得一个字节数组,而不是一个字符串。