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));
}
引用需要用到头文件#include <Wincrypt.h.>
CCryptRandom r;
for (int i=0; i<10; i++)
{
DWORD d;
if (r.get(&d, sizeof d))
cout << d /1000<< endl;
}
根据时间产生随机数
CString str,temp;
int i;
srand( (unsigned)time( NULL ) );
/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );