CC++ 在因特尔CPU下获取随机数
在 C/C++ 中,可以使用 rand() 函数来获取伪随机数。但是,由于 rand() 函数是基于算法生成的,因此它不是真正的随机数。
如果需要获取真正的随机数,可以使用操作系统提供的随机数生成器。在 Windows 系统下,可以使用 CryptGenRandom 函数来获取随机数。在 Linux 系统下,可以使用 /dev/random 或 /dev/urandom 设备文件来获取随机数。
使用 CryptGenRandom 函数获取随机数的示例代码如下:
#include <windows.h>
int main()
{
HCRYPTPROV hProv;
BYTE pbData[4];
// 获取随机数生成器句柄
if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
return 1;
}
// 生成随机数
if (!CryptGenRandom(hProv, sizeof(pbData), pbData))
{
CryptReleaseContext(hProv, 0);
return 1;
}
// 输出随机数
printf("%02X%02X%02X%02X\n", pbData[0], pbData[1], pbData[2], pbData[3]);
// 释放随机数生成器句柄
CryptReleaseContext(hProv, 0);
return 0;
}
使用 /dev/random 或 /dev/urandom 设备文件获取随机数的示例代码如下:
#include <fcntl.h>
#include <unistd.h>
int main()
{
int fd = open("/dev/random", O_RDONLY);
if (fd < 0)
{
return 1;
}
int n;
unsigned int value;
// 读取随机数
n = read(fd, &value, sizeof(value));
if (n != sizeof(value))
{
close(fd);
return 1;
}
// 输出随机数
printf("%08X\n", value);
// 关闭设备文件
close(fd);
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/cjFC 著作权归作者所有。请勿转载和采集!