Administrator
Administrator
发布于 2026-04-30 / 11 阅读
0
0

Windows API - 加密级安全随机数生成器(CSPRNG)

BCryptGenRandom 是 Windows CNG(Cryptography Next Generation) 提供的加密级安全随机数生成器(CSPRNG)接口。

  • 随机源:内核熵池(多源熵:系统事件、硬件噪声等)

  • 适用:密钥、IV、nonce、token、盐值等

  • 安全级别:✔ 可用于生产加密

比起需要种子的随机数和JS中的Math.random更安全

NTSTATUS BCryptGenRandom(
  BCRYPT_ALG_HANDLE hAlgorithm,
  PUCHAR            pbBuffer,
  ULONG             cbBuffer,
  ULONG             dwFlags
);

C++调用:

#include <windows.h> //bcrypt.h中的LONG、ULONG等类型需要这个头文件
#include <bcrypt.h>
#include <iostream>


int main(int argc, char *argv[])
{
    unsigned char buf[32];
    BCryptGenRandom(0, buf, sizeof(buf), BCRYPT_USE_SYSTEM_PREFERRED_RNG);

    for(int i = 0;i < 32; i++) {
        std::cout << static_cast<int>(buf[i]) << ",";
    }
    std::cout << std::endl;
}

例如JS的:

CryptoJS.lib.WordArray.random(256)
//得出:
//[1332124746,301907461,1463382996,1291417688,2541656835,268747997,2411741889,3739882966,3603524533,1076162732,1469872587,3137035406,1967022062,2405437198,2108531528,2682240310,625635432,2663668092,2174281980,443315450,847483172,919776591,4143817022,845629561,705756667,973115487,2597980633,4073888389,29509610,1105570181,228387295,2397917386,633282946,2502962725,3965880018,3410264731,679079821,2495654629,3248048507,3928642262,3237490343,2566604474,2211861274,2122016881,1976840580,1333027213,3371186991,4027893174,3760706731,1755780567,773357322,2665479007,1225681638,2410890292,2138301678,4130270978,3906939849,3060021973,2549497452,943072474,1871728415,3851341447,3001707440,2214945175]
//64个int32,生成64个[4]byte转成int32就可以


评论