Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中是否有一个等效的随机_设备 在C++中,我们可以用随机设备生成真正的随机数(如果你的硬件支持)。我正在用C写一个一次性Pad算法的实现。有没有办法用C生成真正的随机数?我用C写是为了速度和其他一些原因。如果我使用PRNG,它将是不安全的 char *KeyGenerate(unsigned long long StringLength) { std::random_device TrueRandomNumberGenerator; char *Key = (char *) malloc(StringLength + 1); for(unsigned long long I = 0; I < StringLength; I++) { Key[I] = TrueRandomNumberGenerator(); } Key[StringLength] = '\0'; return Key; } char*KeyGenerate(无符号长字符串长度) { std::随机设备TrueRandomNumberGenerator; char*Key=(char*)malloc(StringLength+1); for(无符号长I=0;I_C_Random - Fatal编程技术网

在C语言中是否有一个等效的随机_设备 在C++中,我们可以用随机设备生成真正的随机数(如果你的硬件支持)。我正在用C写一个一次性Pad算法的实现。有没有办法用C生成真正的随机数?我用C写是为了速度和其他一些原因。如果我使用PRNG,它将是不安全的 char *KeyGenerate(unsigned long long StringLength) { std::random_device TrueRandomNumberGenerator; char *Key = (char *) malloc(StringLength + 1); for(unsigned long long I = 0; I < StringLength; I++) { Key[I] = TrueRandomNumberGenerator(); } Key[StringLength] = '\0'; return Key; } char*KeyGenerate(无符号长字符串长度) { std::随机设备TrueRandomNumberGenerator; char*Key=(char*)malloc(StringLength+1); for(无符号长I=0;I

在C语言中是否有一个等效的随机_设备 在C++中,我们可以用随机设备生成真正的随机数(如果你的硬件支持)。我正在用C写一个一次性Pad算法的实现。有没有办法用C生成真正的随机数?我用C写是为了速度和其他一些原因。如果我使用PRNG,它将是不安全的 char *KeyGenerate(unsigned long long StringLength) { std::random_device TrueRandomNumberGenerator; char *Key = (char *) malloc(StringLength + 1); for(unsigned long long I = 0; I < StringLength; I++) { Key[I] = TrueRandomNumberGenerator(); } Key[StringLength] = '\0'; return Key; } char*KeyGenerate(无符号长字符串长度) { std::随机设备TrueRandomNumberGenerator; char*Key=(char*)malloc(StringLength+1); for(无符号长I=0;I,c,random,C,Random,C标准库非常小。要获得真正的随机数,您需要使用特定于操作系统的API 在Linux系统中,您可以从/dev/uradom文件中获得加密强随机字节流。C使用PRNG(伪随机数生成器),因此您无法真正获得真正的随机数 由于您的代码生成一组随机数,您可以简单地: srand(time(NULL)); int r = rand(); 其中srand(时间(空)) 将超过for循环。通过这种方式,您只需播种一次,然后生成随机数,正如Linux上所述,您必须阅读/dev/uradom。在WIndows上,

C标准库非常小。要获得真正的随机数,您需要使用特定于操作系统的API

在Linux系统中,您可以从
/dev/uradom
文件中获得加密强随机字节流。

C使用PRNG(伪随机数生成器),因此您无法真正获得真正的随机数

由于您的代码生成一组随机数,您可以简单地:

srand(time(NULL));
int r = rand();
其中
srand(时间(空))


将超过for循环。通过这种方式,您只需播种一次,然后生成随机数,正如Linux上所述,您必须阅读
/dev/uradom
。在WIndows上,另一种选择是使用

我相信这就是Python中所做的——在Linux上,API调用基于代码的API,而在Windows上调用基于代码的API


对OS X了解不够

arc4random
(如果可用)将生成加密安全的随机数。在Linux上,您可以在
/dev/random
上或多或少地读取实际的“随机设备”。实际上,更倾向于使用/dev/urandom而不是/dev/random:有没有更便于移植的方法呢?/dev/urandom也适用于BSD和MacOS。如果你也需要你的代码在windows上工作,那么我想除了随机数之外,你还有很多其他的问题。您是否使用任何类型的库来实现可移植性?实际上,它只是一个控制台应用程序。我只使用标准C库。Windows不是问题。rand()函数生成可预测的随机数。OP特别说他们想要加密安全的随机数。我对这个答案很不满意。它被要求获得真实的随机数(出于某种原因),但这完全失败了(在这种情况下是危险的)。(我也不明白上面的投票)@sascha OP问你是否能用C生成真正的随机数,我说不行。在他的帖子中,没有提到加密安全的随机数。srand的例子更多地表明你可以“增加”随机性(1)显然这是可能的(使用一些系统api,比如hugomg的答案,或者甚至添加你自己的声卡驱动程序,结合一些随机性提取器来获得熵)(2)说“你不能”(即使它是真的)然后推荐完全不同的东西(并且不讨论危险)是有趣的。(3)你的文章中的第一句话对于C++也是正确的(OP已经有了解决方案,或者大多数其他的编程语言),但是这里没有关系。(4)srand增加了随机性,但不是真正的不可预测性,这在这里很重要。