在 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;
}
``
CC++ 在因特尔CPU下获取随机数

原文地址: https://www.cveoy.top/t/topic/cjFC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录