'복호화'에 해당되는 글 1건

  1. 2009.07.17 해쉬를 이용한 복호화

int CUtility::deSecretCode(char* pszCode)
 {
  HCRYPTPROV    hProv;
  HCRYPTHASH    hHash;
  HCRYPTKEY    hKey;
  BYTE        pbCode[MAX_PASS];
  DWORD        dwDataLen;

  ZeroMemory(pbCode, MAX_PASS);
  sprintf((char*)pbCode, "%s", pszCode);
  dwDataLen = (DWORD)strlen((char*)pbCode) + 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))
    return 1;
  }
  
  // 해쉬 만들기
  if(!CryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash))
   return 2;

  // 해쉬 값 계산
  if(!CryptHashData(hHash, (BYTE*)SECRET_KEY, (DWORD)strlen(SECRET_KEY), 0))
   return 3;

  // 키 만들기
  if(!CryptDeriveKey(hProv, CALG_RC4, hHash,  0x0080*0x10000, &hKey))
   return 4;

  // 복호화
  if(CryptDecrypt(hKey, 0, TRUE, 0, pbCode, &dwDataLen))
   sprintf(pszCode, "%s", (char*)pbCode);
  else
   return 5;


  // 해쉬 없애기
  CryptDestroyHash(hHash);

  // CSP 핸들 풀어주기
  CryptReleaseContext(hProv, 0);

  return 0;
 }

Posted by 명혀니
,