GSI

데이터 암호화 방법

1.요약
데이터를 암호화하는 방법에는 여러가지가 있는데 가장 간단한 방법이 배타적 논리합(Exclusive OR)를 이용하는 방법이 있습니다.

이 방법은 너무 간단해서 보안에 치명적이죠. 특별한 암호방법을 고안해낼려면 그쪽 분야에 많은 연구와 노력이 필요한데 저를 포함해 대부분 암호화에 대한 지식이 거의 전무할겁니다.

저같은 사람들을 위해 MS에서 암호화를 위한 API를 제공하고 있습니다.
하지만 이것도 사용하기가 너무 복잡하고 여러 단계를 거져야하는 불편함이 있습니다.

그래서 최대한 사용하기 간단하게 Class로 만들어 보았습니다.


2.본문

먼저 암호에 필요한 API함수는 어떤것이 있는지 알아보겠습니다.
BOOL WINAPI CryptAcquireContext(HCRYPTPROV *phProv, LPCTSTR Container,
                LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags);

BOOL WINAPI CryptCreateHash(HCRYPTPROV hProv, ALG_ID Algid,
                CRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash);

BOOL WINAPI CryptHashData(HCRYPTHASH hHash, BYTE *pbData,
                DWORD dwDataLen, DWORD dwFlags);

BOOL WINAPI CryptDeriveKey(HCRYPTPROV hProv, ALG_ID Algid,
                HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY *phKey);

BOOL WINAPI CryptEncrypt(HCRYPTKEY hKey, HCRYPTHASH hHash,
                BOOL Final, DWORD dwFlags, BYTE *pbData,
                DWORD *pdwDataLen, DWORD dwBufLen);

BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash,
                BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
자세한 사용법은 MSDN을 참고하세요.
이러한 API의 사용법을 설명하지 않겠습니다. 사실 저도 자세히는 모름니다. Class 멤버 함수와 사용법을 소개드리겠습니다.

BOOL CCrypt::Create(LPBYTE pHashData, DWORD dwHashDataLen)
- 암호화나 해독에 필요한 Key를 생성하는 함수. 쉽게 여기에 Password가 들어간다고 생각하면 됩니다.
void CCrypt::Destroy()
- Create에서 만들어진 Handle을 제거합니다.
BOOL CCrypt::Encrypt(LPBYTE lpBuffer, DWORD& dwBufferLen, BOOL bFanal)
- 데이터를 암호화하는 함수
BOOL CCrypt::Decrypt(LPBYTE lpBuffer, DWORD& dwBufferLen, BOOL bFanal)
- 암호화된 데이터를 해독하는 함수

3.예제

dwDataLen = strPassword.GetLength(); 
CopyMemory(lpData, (LPVOID)(LPCTSTR)strPassword, strPassword.GetLength()); 

// 암호화 
CCrypt Crypt; 
Crypt.Create((LPBYTE)(LPCTSTR)strPassword, strPassword.GetLength()); 
Crypt.Encrypt(lpData, dwDataLen); 
Crypt.Destroy(); 

// 암호화된 데이터 해독 
Crypt.Create((LPBYTE)(LPCTSTR)strPassword, strPassword.GetLength()); 
Crypt.Decrypt(lpData, dwDataLen); 
lpData[dwDataLen] = '\0'; 

::MessageBox(NULL, (LPCTSTR)lpData, "", MB_OK);
Crypt.zip 다운로드

















- 2001.08.19 Smile Seo -



http://www.debuglab.com/knowledge/dataencrypt.html

Posted by gsi
: