Step By Step: Visual C++¿¡¼­ ³­¼ö »ý¼º ¹æ¹ý

±â¼ú ÀÚ·á: 983137 - ÀÌ ¹®¼­°¡ Àû¿ëµÇ´Â Á¦Ç° º¸±â.
¸ðµÎ È®´ë | ¸ðµÎ Ãà¼Ò

¼Ò°³

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 °í°´Áö¿ø »çÀÌÆ®¿¡¼­´Â °í°´´ÔÀÇ ¼Ò¸®¸¦ ±Í´ã¾Æ µè½À´Ï´Ù. ¾Æ·¡ ÀÇ°ß º¸³»±â·Î ¼ÒÁßÇÑ ÀÇ°ß º¸³»Áֽñ⠹ٶø´Ï´Ù.

¼Ó¼º

±â¼ú ÀÚ·á: 983137 - ¸¶Áö¸· °ËÅä: 2010³â 4¿ù 29ÀÏ ¸ñ¿äÀÏ - ¼öÁ¤: 1.0
º» ¹®¼­ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
  • Microsoft Visual C++ 2008 Express Edition
Ű¿öµå:?
kbstepbystep kbhowto KB983137

Çǵå¹é º¸³»±â