使用 libsodium 在 C 中生成伪随机数
Pseudo Random number generation in C using libsodium
我正在尝试创建一个整数序列,每次为生成器播种时都相同,但是我正在努力让它工作。现在顺序永远不一样了。
#include "sodium.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
if (sodium_init() == -1)
{
return 1;
}
unsigned int myInts[128];
char seed[randombytes_SEEDBYTES] = "a seeeeeed";
printf("%s", seed);
randombytes_buf_deterministic(myInts, 128, seed);
for (int i = 0; i < 128; i++)
{
printf("\n(%u)", myInts[i]);
}
}
问题是,这里
randombytes_buf_deterministic(myInts, 128, seed);
你生成了 128 字节的伪随机数据,但是你的缓冲区
unsigned int myInts[128];
是 sizeof(int)*128
字节大。所以你必须用
生成足够的数据
randombytes_buf_deterministic(myInts, sizeof(myInts), seed);
用确定性值填充整个缓冲区。然后它应该会给出您期望的输出。
我正在尝试创建一个整数序列,每次为生成器播种时都相同,但是我正在努力让它工作。现在顺序永远不一样了。
#include "sodium.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
if (sodium_init() == -1)
{
return 1;
}
unsigned int myInts[128];
char seed[randombytes_SEEDBYTES] = "a seeeeeed";
printf("%s", seed);
randombytes_buf_deterministic(myInts, 128, seed);
for (int i = 0; i < 128; i++)
{
printf("\n(%u)", myInts[i]);
}
}
问题是,这里
randombytes_buf_deterministic(myInts, 128, seed);
你生成了 128 字节的伪随机数据,但是你的缓冲区
unsigned int myInts[128];
是 sizeof(int)*128
字节大。所以你必须用
randombytes_buf_deterministic(myInts, sizeof(myInts), seed);
用确定性值填充整个缓冲区。然后它应该会给出您期望的输出。