[mfc] WINDOWS API를 이용한 암호화 간단 예제
#include "stdafx.h"
#include <Windows.h>
#include <WinCrypt.h>
#define MY_PASS "papaya" // 패스워드
#define KeyLen 0x0080 * 0x10000 // 128-bit
int _tmain(int argc, _TCHAR* argv[])
{
HCRYPTPROV hProv;
HCRYPTHASH hHash;
HCRYPTKEY hKey;
BYTE pbData[100] = "TEST TEST TEST REAL TEST";
DWORD dwDataLen = (DWORD)strlen((char*)pbData) + 1;
// CSP(Crystographic Service Provider) 핸들 얻기
if(!CryptAcquireContext(&hProv, NULL, MS_ENHANCED_PROV,
PROV_RSA_FULL, 0))
{
// 유저용 키 컨테이너 만들기
if(!CryptAcquireContext(&hProv, NULL, MS_ENHANCED_PROV,
PROV_RSA_FULL, CRYPT_NEWKEYSET))
{
printf("유저용 키 켄테이너 만들기 에러\n");
return 1;
}
}
// 해쉬 만들기
if(!CryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash))
{
printf("해쉬 만들기 에러\n");
return 2;
}
// 해쉬 값 계산
if(!CryptHashData(hHash, (BYTE*)MY_PASS, (DWORD)strlen(MY_PASS), 0))
{
printf("해쉬 값 계산 에러\n");
return 3;
}
// 키 만들기
if(!CryptDeriveKey(hProv, CALG_RC4, hHash, KeyLen, &hKey))
{
printf("키 만들기 에러\n");
return 4;
}
// 암호화
if(!CryptEncrypt(hKey, 0, TRUE, 0, pbData, &dwDataLen, 100))
{
printf("암호화 에러\n");
return 5;
}
printf("암호건 문자 -> %s\n", pbData);
// 복호화
if(!CryptDecrypt(hKey, 0, TRUE, 0, pbData, &dwDataLen))
{
printf("복호화 에러\n");
return 6;
}
printf("암호푼 문자 -> %s\n", pbData);
// 해쉬 없애기
CryptDestroyHash(hHash);
// CSP 핸들 풀어주기
CryptReleaseContext(hProv, 0);
return 0;
}
반응형
'IT-개발,DB' 카테고리의 다른 글
[개발/VC++] fatal error C1083: 포함 파일을 열 수 없습니다. 'stdafx.h': No such file or directory (0) | 2011.11.17 |
---|---|
[개발/MFC] 비스타 이상에서 권한이 낮은 프로세스에서 WM_COPYDATA 메세지 전송 (0) | 2011.11.16 |
[개발/VC++] #pragma warning 사용 (0) | 2011.10.29 |
[개발/C/C++] 전처리문 (#define, #if, #ifdef, #ifndef, #defined, .. ) (0) | 2011.10.20 |
[개발] DllMain에서 다음 작업들은 절대로 하지 말 것 (0) | 2011.10.05 |
댓글