C++ BCryptGenRandom 生成随机数
BCryptGenRandom 是一个 Windows API 函数,用于生成加密强度的随机数。它可以用于生成随机密码、加密密钥等。
使用 BCryptGenRandom 函数需要以下步骤:
- 引入 Windows.h 头文件
#include <Windows.h>
- 引入 bcrypt.h 头文件
#include <bcrypt.h>
- 定义变量和参数
BCRYPT_ALG_HANDLE hAlg; // 加密算法句柄
PBYTE pbBuffer; // 随机数缓冲区指针
ULONG cbBuffer; // 随机数缓冲区大小
ULONG dwFlags; // 生成随机数的标志
- 初始化加密算法句柄
if (!NT_SUCCESS(BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RNG_ALGORITHM, NULL, 0)))
{
// 加密算法句柄初始化失败
return;
}
- 分配随机数缓冲区
cbBuffer = 16; // 随机数缓冲区大小
pbBuffer = (PBYTE)malloc(cbBuffer);
if (pbBuffer == NULL)
{
// 随机数缓冲区分配失败
return;
}
- 生成随机数
dwFlags = BCRYPT_USE_SYSTEM_PREFERRED_RNG; // 使用系统首选 RNG
if (!NT_SUCCESS(BCryptGenRandom(hAlg, pbBuffer, cbBuffer, dwFlags)))
{
// 随机数生成失败
return;
}
- 清理资源
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;
}
``
原文地址: https://www.cveoy.top/t/topic/clcf 著作权归作者所有。请勿转载和采集!