如何为随机数生成随机种子
How to generate random seed for random numbers
我正在尝试为 public 密钥和私钥生成大的随机数。我对在客户端生成随机 256 位私钥的初始种子有疑问。
您可能知道,我们不应该在 C 中使用 rand
或 srand
函数,因为它们很容易损坏。
如何生成随机种子来生成随机 256 位私钥?
我使用 GMP 的线性同余算法在 C 中生成随机数。
在 unix 系统上,您可以读取 /dev/random
和 /dev/urandom
文件以获得一些“随机性”字节序列。这些序列基于您的系统熵。
有关它们的差异的更多详细信息,请参阅 this post。
#include <unistd.h> // read
#include <fcntl.h> // open
#include <stdio.h> // printf
int main(void)
{
int fd;
unsigned int seed;
fd = open("/dev/urandom", O_RDONLY);
read(fd, &seed, sizeof seed);
printf("%u\n", seed);
// Then you can use srand with your new random seed
return (0);
}
注意:打开阅读后不要忘记检查错误,使用后要关闭fd
。
我正在尝试为 public 密钥和私钥生成大的随机数。我对在客户端生成随机 256 位私钥的初始种子有疑问。
您可能知道,我们不应该在 C 中使用 rand
或 srand
函数,因为它们很容易损坏。
如何生成随机种子来生成随机 256 位私钥?
我使用 GMP 的线性同余算法在 C 中生成随机数。
在 unix 系统上,您可以读取 /dev/random
和 /dev/urandom
文件以获得一些“随机性”字节序列。这些序列基于您的系统熵。
有关它们的差异的更多详细信息,请参阅 this post。
#include <unistd.h> // read
#include <fcntl.h> // open
#include <stdio.h> // printf
int main(void)
{
int fd;
unsigned int seed;
fd = open("/dev/urandom", O_RDONLY);
read(fd, &seed, sizeof seed);
printf("%u\n", seed);
// Then you can use srand with your new random seed
return (0);
}
注意:打开阅读后不要忘记检查错误,使用后要关闭fd
。