|
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 - |