// test_CryptGenRandom.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
#include "wincrypt.h"
#include <iostream>
using namespace std;
class CCryptRandom
{
public:
BOOL Random(void *lpBuffer,DWORD dwLen);
CCryptRandom();
virtual~CCryptRandom();
private:
HCRYPTPROV hCryptProv;
};
CCryptRandom::CCryptRandom()
{
hCryptProv=NULL;
CryptAcquireContext((HCRYPTPROV*)&hCryptProv,NULL,NULL,PROV_RSA_FULL,0);
}
CCryptRandom::~CCryptRandom()
{if(hCryptProv!=NULL)CryptReleaseContext(hCryptProv,0);
}
BOOL CCryptRandom::Random(void *lpBuffer, DWORD dwLen)
{
if(hCryptProv==NULL)return FALSE;
BOOL bRet=CryptGenRandom(hCryptProv,dwLen,(BYTE*)lpBuffer);///reinterpret_cast<LPBYTE>lpBuffer);
return bRet;
}
int _tmain(int argc, _TCHAR* argv[])
{
CCryptRandom crypt;
BYTE byte[MAX_PATH];
BOOL bReturnValue = crypt.Random(&byte, MAX_PATH);
for (DWORD i = 0; i < 8; ++i)
std::cout << std::dec << static_cast<unsigned int>(byte[i]) << std::endl;
return 0;
}
//
#include "stdafx.h"
#include "windows.h"
#include "wincrypt.h"
#include <iostream>
using namespace std;
class CCryptRandom
{
public:
BOOL Random(void *lpBuffer,DWORD dwLen);
CCryptRandom();
virtual~CCryptRandom();
private:
HCRYPTPROV hCryptProv;
};
CCryptRandom::CCryptRandom()
{
hCryptProv=NULL;
CryptAcquireContext((HCRYPTPROV*)&hCryptProv,NULL,NULL,PROV_RSA_FULL,0);
}
CCryptRandom::~CCryptRandom()
{if(hCryptProv!=NULL)CryptReleaseContext(hCryptProv,0);
}
BOOL CCryptRandom::Random(void *lpBuffer, DWORD dwLen)
{
if(hCryptProv==NULL)return FALSE;
BOOL bRet=CryptGenRandom(hCryptProv,dwLen,(BYTE*)lpBuffer);///reinterpret_cast<LPBYTE>lpBuffer);
return bRet;
}
int _tmain(int argc, _TCHAR* argv[])
{
CCryptRandom crypt;
BYTE byte[MAX_PATH];
BOOL bReturnValue = crypt.Random(&byte, MAX_PATH);
for (DWORD i = 0; i < 8; ++i)
std::cout << std::dec << static_cast<unsigned int>(byte[i]) << std::endl;
return 0;
}
本文介绍了一个C++ MFC应用示例,演示如何利用Windows API函数CryptGenRandom生成随机数。通过创建CCryptRandom类并实现CryptAcquireContext和CryptGenRandom,可以在程序中生成安全的随机字节。在主函数中,生成的随机字节被输出到控制台。

1351

被折叠的 条评论
为什么被折叠?



