gpt4 book ai didi

linux - 类似于/dev/urandom 的东西,带有可配置的种子?

转载 作者:行者123 更新时间:2023-12-01 03:55:13 24 4
gpt4 key购买 nike

我是 dd来自 /dev/urandom为了创建具有随机内容的文件。这很有效,但我希望能够在稍后通过使用相同的种子再次运行 PRNG 来重现文件内容。是否有任何暴露字符设备的可种子 PRNG?

我正在使用最新的 Linux 3.X 内核。

最佳答案

/dev/urandom被设计为尽可能不可预测。听起来您想要一个更传统的种子伪随机数生成器。

这是我刚用 C 写的一个:

#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
char *endptr;
unsigned long int seed;

if (argc != 2 || *argv[1] == '\0') {
fprintf(stderr, "usage: %s seed\n", argv[0]);
return EXIT_FAILURE;
}
errno = 0;
seed = strtoul(argv[1], &endptr, 0);
if (errno != 0 || *endptr != '\0' || seed > UINT_MAX) {
fprintf(stderr, "%s: invalid seed\n", argv[0]);
return EXIT_FAILURE;
}
srandom((unsigned int) seed);

while (1) {
int i;
long int randomnum = random();
for (i = 0; i < sizeof randomnum; i++) {
if (putchar((randomnum >> (i * CHAR_BIT)) & UCHAR_MAX) == EOF) {
return EXIT_SUCCESS;
}
}
}
}

这是一个程序,而不是设备文件,但它的输出格式与您从 /dev/urandom 获得的格式相同。 .您可以将它的输出通过管道传输到 dd并省略 if .

如果你需要想出一个真正随机的种子来提供给程序,你可以在 bash 中从 /dev/urandom 获得一个。像这样:

seed=$(od -vAn -N4 -tu4 </dev/urandom)

将 4 替换为任何 sizeof(unsigned int)在您的机器上(可能是 4 个)。

关于linux - 类似于/dev/urandom 的东西,带有可配置的种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17861260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com