현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

Step By Step: Visual C++에서 난수 생성 방법

소개
Visual C++에서는 난수를 생성하기 위해 전통적으로 CRT(C Run-time Libraries) 함수인 srand()rand()를 사용하였습니다. 이 문서에서는 이와 더불어 윈도우에서 제공하는 Cryptography API의 하나인 CryptGenRandom() 함수를 이용하여 난수를 생성하는 방법에 대해 간략히 설명합니다.
방법 1: CRT 함수를 이용한 난수 생성 방법
CRT 함수를 이용하여 난수를 생성하려면 rand() 함수를 사용합니다. 그런데 rand() 함수를 호출하려면 반드시 srand() 함수를 먼저 호출해야 하며, 이 때 적절한 seed 값을 매개변수로 전달해야 합니다. 이러한 seed 값으로는 time() 함수의 반환 값을 이용하는 것이 일반적인 사용 예입니다.
int randNumber;srand(time(NULL));randNumber = rand();
방법 2: Cryptography API를 이용한 난수 생성 방법
윈도우 환경에서 난수를 생성해야 하는 경우라면 CRT 함수 대신 Cryptography API의 하나인 CryptGenRandom() 함수를 고려해 볼 수 있습니다.
이 함수를 이용하면 주어진 버퍼의 크기만큼 난수를 생성할 수 있는 장점이 있습니다.

다음은 0부터 100의 범위 내에서 난수를 생성하는 예제 코드입니다.
#include "stdafx.h"#include <iostream>#include <windows.h>using namespace std;#pragma comment(lib, "crypt32.lib")#include <Wincrypt.h>#define MY_ENCODING_TYPE  (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)int main(){    //--------------------------------------------------------------------    // 변수를 선언하고 초기화 합니다.    HCRYPTPROV   hCryptProv;    BYTE         pbData;    //-------------------------------------------------------------------    // 암호 제공자의 컨텍스트 핸들을 얻습니다.    if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0))     {            printf("CryptAcquireContext succeeded. \n");    }    else    {        printf("Error during CryptAcquireContext!\n");    }    //--------------------------------------------------------------------    // BYTE 범위내에서 난수를 생성합니다.    if(CryptGenRandom(hCryptProv, 1, &pbData))     {        printf("Random number is: %d.\n", ((int)pbData) * 100 / 255);    }    else    {        printf("Error during CryptGenRandom.\n");        exit(1);    }    //-------------------------------------------------------------------    // 컨텍스트 핸들을 해제합니다.    if(hCryptProv)    {        if (!CryptReleaseContext(hCryptProv, 0))        {            printf("Failed CryptReleaseContext\n");        }    }    return 0;}
의견 보내기
의견 보내기
Microsoft 고객지원 사이트에서는 고객님의 소리를 귀담아 듣습니다. 아래 의견 보내기로 소중한 의견 보내주시기 바랍니다.
속성

문서 ID: 983137 - 마지막 검토: 05/23/2014 10:26:00 - 수정: 1.3

Microsoft Visual C++ 2008 Express Edition

  • kbstepbystep kbhowto KB983137
피드백
r="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">