µ¥ÀÌÅÍ ¾Ïȣȭ ¹æ¹ý


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 -