// NFZipper.cpp : ÄÜ¼Ö ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÁøÀÔÁ¡À» Á¤ÀÇÇÕ´Ï´Ù. // #include "stdafx.h" #include "GZip/zlib.h" #pragma comment(lib,"zlib.lib") extern "C" { #include "MD5/global.h" #include "MD5/md5.h" } #include "NFFilePtr.h" bool GetMD5(char* inData, int len, char* outMD5) { MD5_CTX context; unsigned char digest[16] ; memset( digest, 0, sizeof( char ) * 16 ) ; MD5Init(&context); MD5Update(&context, reinterpret_cast( inData ), len ); MD5Final(digest, &context); char strMD5[40]; memset(strMD5, 0, sizeof(strMD5)); for (int i = 0; i < 16; ++i) { sprintf(strMD5 + i * 2, "%02x", digest[i]); } strcpy(outMD5, strMD5); return true; } int _tmain(int argc, _TCHAR* argv[]) { if(argc != 4) { printf("NFZipper.exe [/e:/d] in:filename out:filename \n"); printf("/e : Encrypt\n"); printf("/d : Decrypt\n"); return 0; } int iType = 0; char input[512] = {0, }; char output[512] = {0, }; for(int i = 1; i < argc; ++i) { if(strnicmp(argv[i], "/e", 2) == 0) // ¾ÏÈ£ iType = 0; else if(strnicmp(argv[i], "/d", 2) == 0) // ¾ÏÈ£ iType = 1; else if(strnicmp(argv[i], "in:", 3) == 0) strcpy(input, &argv[i][3]); else if(strnicmp(argv[i], "out:", 4) == 0) strcpy(output, &argv[i][4]); } /////////////////////////////////////////////////////////////////// // in ÆÄÀÏÀ» ·ÎµùÇÕ´Ï´Ù. char* fileDat = NULL; char* outDat = NULL; long len; long datalen = 0; // ÆÄÀÏÀÇ MD5¸¦ »ý¼ºÇÕ´Ï´Ù. char szMD5[40]; memset(szMD5, 0, sizeof(szMD5)); if(strlen(input) > 0) { Nave::NFFilePtr fp(input, "rb"); if(iType == 0) { len = fp.Length(); fileDat = new char[len]; fread(fileDat, len, 1, fp); GetMD5(fileDat, len, szMD5); outDat = new char[len*2]; datalen = 0; } else if(iType == 1) { fread(&len, sizeof(long), 1, fp); fread(&datalen, sizeof(long), 1, fp); fread(szMD5, 32, 1, fp); fileDat = new char[datalen]; fread(fileDat, datalen, 1, fp); outDat = new char[len*2]; } } /////////////////////////////////////////////////////////////////// if(iType == 0) { // ÆÄÀÏÀ» ÀÎÄÚµù ÇÕ´Ï´Ù. uLongf destLen = len*2; compress2((Bytef*)outDat, &destLen, (Bytef*)fileDat, len, 5); outDat[destLen] = 0; Nave::NFFilePtr fp(output, "wb"); fwrite(&len, sizeof(long), 1, fp); datalen = (long)destLen; fwrite(&datalen, sizeof(long), 1, fp); fwrite(szMD5, 32, 1, fp); // MD5¸¦ ÀÌ¿ëÇØ ¾Ïȣȭ¸¦ ÇÕ´Ï´Ù. for(long i = 0; i < datalen; ++i) { outDat[i] = outDat[i]^szMD5[i%32]; } fwrite(outDat, datalen, 1, fp); } else if(iType == 1) { // MD5¸¦ ÀÌ¿ëÇØ ¾Ïȣȭ¸¦ ÇÕ´Ï´Ù. for(long i = 0; i < datalen; ++i) { fileDat[i] = fileDat[i]^szMD5[i%32]; } // ÆÄÀÏÀ» µðÄÚµù ÇÕ´Ï´Ù. uLongf destLen = len*2; uncompress((Bytef*)outDat, &destLen, (Bytef*)fileDat, datalen); outDat[destLen]=0; Nave::NFFilePtr fp(output, "wb"); fwrite(outDat, (long)destLen, 1, fp); } if(fileDat) delete []fileDat; if(outDat) delete []outDat; return 0; }