64,676
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <Wincrypt.h>
#include <iostream>
#pragma comment(lib,"Advapi32.lib")
using namespace std;
class CCryptRandom
{
public:
CCryptRandom();
virtual ~CCryptRandom();
bool get(void *lpGoop,DWORD cbGoop);
private:
HCRYPTPROV m_hProv;
};
CCryptRandom::CCryptRandom()
{
m_hProv=NULL;
CryptAcquireContext(&m_hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
}
CCryptRandom::~CCryptRandom()
{
if(m_hProv)
CryptReleaseContext(m_hProv,0);
}
bool CCryptRandom::get(void *lpGoop,DWORD cbGoop)
{
if(!m_hProv)
return false;
return CryptGenRandom(m_hProv,cbGoop,reinterpret_cast <LPBYTE>(lpGoop));
}
void main()
{
CCryptRandom r;
//开始生成随机数,例如100个[0,99]域的随机数
for(int i=0;i <100;i++)
{
DWORD d;
if(r.get(&d,sizeof d))
cout <<d%100 <<endl;
}
}