사용자 도구

사이트 도구


winapi:암호화

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
winapi:암호화 [2012/04/20 19:43] – 바깥 편집기 127.0.0.1winapi:암호화 [2024/04/23 22:43] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +====== Cryptography API ======
  
 +In Microsoft cryptographic technologies 
 +  * CryptoAPI
 +  * Cryptographic Service Providers (CSP)
 +  * CryptoAPI Tools
 +  * CAPICOM
 +  * WinTrust
 +  * issuing and managing certificates
 +  * developing customizable public key infrastructures
 +  * Certificate and smart card enrollment
 +  * certificate management
 +  * custom module development 
 +
 +지원하는게 많네, 하지만 관심은 CryptoAPI에만 있으니 나머지는 패스
 +===== CryptoAPI =====
 +
 +
 +윈도우 어플리케이션에서 인터넷과 같은 보안 사각지대에서 문서나 데이터를 안전하게 주고 받을 수 있도록 하는 목적으로 사용된다.
 +C나 %%C++%%을 사용할 수 있어야하고 암호화에 대한 지식이 있으면 편하겠지.
 +
 +===== CAPICOM =====
 +
 +32bit 컴포넌트로, VBScript나 %%C++%% 언어로 애플리케이션 개발에 사용되는 컴포넌트.
 +
 +OS가 지원하는(명시한) 런타임 환경(스펙)하에서 사용되는 것이 가능합니다.
 +
 +(CAPICOM is available for use in the operating systems specified in Run-Time Requirements.)
 +
 +===== Quick Link =====
 +
 +  * [[http://msdn.microsoft.com/ko-kr/library/7770475c(v=VS.80).aspx|CSP(cryptographic service provider)캡슐 atl class]]
 +  * [[http://msdn.microsoft.com/en-us/library/aa388162(v=VS.85).aspx|Using Cryptography]]
 +  * [[http://msdn.microsoft.com/en-us/library/aa382052(v=VS.85).aspx|Example C Program: Encoding and Decoding Data]]
 +
 +====== 예제 모음 ======
 +
 +===== Cryptography API 를 사용한 난수 생성 =====
 +
 +이런 것도 되나.. 흠
 +
 +웹사이트 설명 :
 +  * 윈도우 환경에서 난수를 생성해야 하는 경우라면 CRT 함수 대신 Cryptography API의 하나인 CryptGenRandom() (http://msdn.microsoft.com/ko-kr/library/aa379942.aspx) 함수를 고려해 볼 수 있습니다. 
 +  * 이 함수를 이용하면 주어진 버퍼의 크기만큼 난수를 생성할 수 있는 장점이 있습니다.
 +
 +<code c++>
 +#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;
 +}
 +
 +</code>