BCryptGenRandom 是一个 Windows API 函数,用于生成加密强度的随机数。它可以用于生成随机密码、加密密钥等。

使用 BCryptGenRandom 函数需要以下步骤:

  1. 引入 Windows.h 头文件
#include <Windows.h>
  1. 引入 bcrypt.h 头文件
#include <bcrypt.h>
  1. 定义变量和参数
BCRYPT_ALG_HANDLE hAlg;  // 加密算法句柄
PBYTE pbBuffer;          // 随机数缓冲区指针
ULONG cbBuffer;          // 随机数缓冲区大小
ULONG dwFlags;           // 生成随机数的标志
  1. 初始化加密算法句柄
if (!NT_SUCCESS(BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RNG_ALGORITHM, NULL, 0)))
{
    // 加密算法句柄初始化失败
    return;
}
  1. 分配随机数缓冲区
cbBuffer = 16;  // 随机数缓冲区大小
pbBuffer = (PBYTE)malloc(cbBuffer);
if (pbBuffer == NULL)
{
    // 随机数缓冲区分配失败
    return;
}
  1. 生成随机数
dwFlags = BCRYPT_USE_SYSTEM_PREFERRED_RNG;  // 使用系统首选 RNG
if (!NT_SUCCESS(BCryptGenRandom(hAlg, pbBuffer, cbBuffer, dwFlags)))
{
    // 随机数生成失败
    return;
}
  1. 清理资源
free(pbBuffer);
BCryptCloseAlgorithmProvider(hAlg, 0);

完整示例代码:

#include <Windows.h>
#include <bcrypt.h>

void GenerateRandomBytes(PBYTE pbBuffer, ULONG cbBuffer)
{
    BCRYPT_ALG_HANDLE hAlg;
    ULONG dwFlags;

    // 初始化加密算法句柄
    if (!NT_SUCCESS(BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RNG_ALGORITHM, NULL, 0)))
    {
        return;
    }

    // 分配随机数缓冲区
    PBYTE pbBuffer = (PBYTE)malloc(cbBuffer);
    if (pbBuffer == NULL)
    {
        BCryptCloseAlgorithmProvider(hAlg, 0);
        return;
    }

    // 生成随机数
    dwFlags = BCRYPT_USE_SYSTEM_PREFERRED_RNG;
    if (!NT_SUCCESS(BCryptGenRandom(hAlg, pbBuffer, cbBuffer, dwFlags)))
    {
        free(pbBuffer);
        BCryptCloseAlgorithmProvider(hAlg, 0);
        return;
    }

    // 输出随机数
    for (ULONG i = 0; i < cbBuffer; i++)
    {
        printf("%02X", pbBuffer[i]);
    }
    printf("\n");

    // 清理资源
    free(pbBuffer);
    BCryptCloseAlgorithmProvider(hAlg, 0);
}

int main()
{
    GenerateRandomBytes(NULL, 16);  // 生成 16 字节随机数
    return 0;
}
``
C++ BCryptGenRandom 生成随机数

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

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