/************************************************************** * ÀÛ¼ºÀÚ : Seok-jun Bae * ³¯ ÀÚ : 2001. 4. 28. * ³» ¿ë : DES ¾Ïȣȭ º¹È£È­ ÇÁ·Î±×·¥ * E-mail : qprk@qprk.pe.kr * * ÀÌ ¼Ò½ºÄڵ忡 ´ëÇÑ ¾î¶°ÇÑ º¸Áõµµ ¾ø½À´Ï´Ù. * ÀÌ ¼Ò½º¸¦ ¼öÁ¤ ¹èÆ÷ÇÒ¼ö ÀÖÁö¸¸ ´Ù¸¥°÷¿¡ ¹èÆ÷ÇÒ °æ¿ì * ÀÌ ¹®ÀåÀÌ Æ÷ÇԵǾî¾ß ÇÕ´Ï´Ù. **************************************************************/ #include #include //#include #include #define P2C 1 /* Æò¹®À» ¾ÏÈ£·Î */ #define C2P 2 /* ¾ÏÈ£¸¦ Æò¹®À¸·Î */ #define BUFFSIZE 20500 /* 20KByte */ #define RWSIZE 20000 //#define DISP_char2binary //#define DISP_char2binary_strlen //#define DISP_keyGenerate_binary2char //#define DISP_keyGenerate_leftShift //#define DISP_keyGenerate_final //#define DISP_desMain_C2P_Key //#define DISP_desMain_fileState //#define DISP_startDes_textBuff //#define DISP_startDes_tgtData //#define DISP_desRound_sboxValue //#define DISP_desRound_xor #define for_windog /* linux¿¡¼­´Â ÇÊ¿ä¾øÀ¸´Ï ÁÖ¼®Ã³¸®.. */ void keyGenerate(char *); void desMain(int, char *, char *); void startDes(int, int, char *, char *); void desRound(int *, int *); void char2binary(int *, char *, int); char binary2char(int *); void swap32bit(int *, int *, int *); void helpText(); void keyProc(char *keySrc); int MAT_IP[64]={58, 50, 42, 34, 26 ,18 ,10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7}; int MAT_IP_1[64]={40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25}; int MAT_EXP[48]={32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1}; int MAT_PERMU[32]={16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25}; int MAT_SBOX[8][4][16]={{{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 2, 14, 10, 0, 6, 13}}, {{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10}, {3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5}, {0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15}, {13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}}, {{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8}, {13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1}, {13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7}, {1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}}, {{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15}, {13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9}, {10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4}, {3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}}, {{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9}, {14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6}, {4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14}, {11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}}, {{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1}, {13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6}, {1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2}, {6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}}, {{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11}, {10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8}, {9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6}, {4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}}, {{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7}, {1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2}, {7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8}, {2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}}}; int MAT_PC_1[56]={57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4}; int MAT_PC_2[48]={14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32}; int KEY[16][48]; /************************************************************** * main * **************************************************************/ main(int argc, char **argv) { if(argc != 4) helpText(); if(!(strcmp(argv[1],"-c"))) desMain( P2C, argv[2], argv[3]); else if(!(strcmp(argv[1],"-p"))) desMain( C2P, argv[2], argv[3]); else helpText(); } /************************************************************** * DES ¾Ïȣȭ ¹× º¹È£È­ * jobType : P2C(0)ÀÏ°æ¿ì ¾Ïȣȭ, C2P(1)ÀÏ°æ¿ì º¹È£È­ * passWord : ÀÔ·ÂµÈ key * fileName : ¾Ïȣȭ ¹× º¹È£È­ ÇÒ fileÀ̸§ **************************************************************/ void desMain(int jobType, char *passWord, char *fileName) { FILE *srcFile, *targetFile; int tempKey[16][48]; long int dataSize; long int readSize, writeSize; char *fileSrcBuff, *fileTgtBuff; char nameTemp[100]={0,}; char qprkDes[100]={0,}; int i,j; ////////////////////////////////////////////////////////// keyGenerate(passWord); /* DES¿¡ »ç¿ëÇÒ Key »ý¼º */ //////////////////////////////////////////////////////// if(jobType == C2P){ /* C2PÀÏ°æ¿ì key¸¦ ¿ª¼øÀ¸·Î ³ª¿­ */ for(i=0; i<16; i++) for(j=0; j<48; j++) tempKey[15-i][j] = KEY[i][j]; for(i=0; i<16; i++) for(j=0; j<48; j++) KEY[i][j] = tempKey[i][j]; #ifdef DISP_desMain_C2P_Key /* C2P ¿ª¼ø Key È®ÀÎ */ printf("\n\nC2P key\n"); for(i=0; i<16; i++){ for(j=0; j<48; j++) printf("%d", KEY[i][j]); printf("\n"); }// for(i=0; i<16; i++){ #endif }// if(jobType){ strcpy(nameTemp,fileName); if(jobType == C2P){ /* target file À̸§ °áÁ¤ */ if( (strcmp(".des", fileName+(strlen(fileName)-4)))){ /* º¹È£È­ÇÒ filename °Ë»ç */ printf("%s is not qprkDES!!\n\n",fileName); helpText(); }// if( !(strcmp(".des", filename+(strlen(fileName)-4)))){ nameTemp[ strlen(fileName)-4 ] = '\0'; /* file nameÀÇ .des¸¦ Á¦°Å */ } else { /* jobType ÀÌ P2CÀΰæ¿ì */ nameTemp[ strlen(fileName)-4 ] = '\0'; /* file nameÀÇ .des¸¦ Á¦°Å */ sprintf(qprkDes,"%s.des",nameTemp); }// else { if( (srcFile = fopen( fileName, "r+b" )) == NULL ){ /* source fileÀ» ¿¬´Ù */ printf("Source file can not open!!!! -%s- \n", fileName); exit(0); }// if( (srcFile=(fileName, "r"))==NULL ){ fseek(srcFile, 0, SEEK_END); /* srcFileÀÇ Å©±â¸¦ ¾Ë¾Æº¸°í */ readSize = ftell(srcFile); /* ±× Å©±â¸¸Å­ ¹öÆÛ¸¦ Àâ°í srcFileÀ» */ fseek(srcFile, 0, SEEK_SET); /* buff¿¡ º¹»çÇÏ°í srcFileÀ» ´Ý´Â´Ù*/ dataSize = readSize / 8; #ifdef DISP_desMain_fileState printf("¿ø·¡ fileÅ©±â:%ld ³ª´©±â8°á°ú:%d \n", readSize, dataSize); #endif dataSize++; /* ±âÁ¸ÀÇ fileÅ©±âº¸´Ù ¹öÆÛ¸¦ Å©°Ô Àâ±â À§ÇØ */ ///////////////////////////////////////////////////////////////////////////////////////// #ifdef for_windog if(readSize > RWSIZE){ /* fileÅ©±â°¡ 20K ÀÌ»óÀÌ¸é µû·Î µ¹¸². ¸®´ª½º¿¡¼­ ÇÊ¿ä¾øÀ½*/ // 25000 Àº RWSIZE¸¦ 8·Î ³ª´« °ª //#define BUFFSIZE 200200 //#define RWSIZE 200000 if(jobType == C2P){ /* C2PÀÏ°æ¿ì ÀúÀåµÈ file size¸¦ Àоî¿È */ fread(&writeSize, sizeof(long int), 1, srcFile); fgets(qprkDes, 100, srcFile); /* ¿ø·¡ file¸íÀ» Àоî¿È */ qprkDes[ strlen(qprkDes) -1] = '\0'; /* \n Á¦°Å */ strcpy(nameTemp, qprkDes); readSize -= sizeof(long int); #ifdef DISP_desMain_fileState printf("write size : %ld\n",writeSize); #endif }// if(jobType == C2P){ if( (targetFile = fopen( qprkDes, "w+b" )) == NULL ){ /* target fileÀ» ¿¬´Ù */ printf("Target file open error!!!! -%s- \n", qprkDes); exit(0); }// if( (targetFile = fopen( nameTemp, "w" )) == NULL ){ if(jobType == P2C){ fwrite(&readSize, sizeof(long int), 1, targetFile); /* file size¸¦ ÀúÀå */ fprintf(targetFile,"%s\n",fileName); } fileSrcBuff = (char *)malloc(sizeof(char) * BUFFSIZE); /* BuffÀÇ memoryÇÒ´ç */ fileTgtBuff = (char *)malloc(sizeof(char) * BUFFSIZE); for(i=0; i< ((readSize/RWSIZE) + 1); i++){ /* 200000Byte ¾¿ Àß¶ó¼­ ¾ÏÈ£, º¹È£È­ */ memset(fileSrcBuff, 0, sizeof(char) * BUFFSIZE); /* ÇÒ´çµÈ °ø°£À» \0·Î ÃʱâÈ­ */ memset(fileTgtBuff, 0, sizeof(char) * BUFFSIZE); fread(fileSrcBuff, RWSIZE, 1, srcFile); /* file³»¿ëÀ» buff¿¡ º¹»ç */ #ifdef DISP_desMain_fileState printf("file¿¡¼­ Àоî¿Â ³»¿ë\n%s\n", fileSrcBuff); #endif ////////////////////////////////////////////////////////////////////////////////// startDes(jobType, RWSIZE/8, fileSrcBuff, fileTgtBuff); /* ¾Ïȣȭ º¹È£È­¸¦ ½ÃÀÛ */ //////////////////////////////////////////////////////////////////////////////// #ifdef DISP_desMain_fileState printf("job type : %d\n", jobType); printf("target file name: %s\n",qprkDes); /* test */ #endif if(jobType == P2C){ fwrite(fileTgtBuff, RWSIZE, 1, targetFile); /* buffÀÇ ³»¿ëÀ» file¿¡ ÀúÀå */ } else { if(writeSize <= RWSIZE){ fwrite(fileTgtBuff, writeSize, 1, targetFile); /* buffÀÇ ³»¿ëÀ» file¿¡ ÀúÀå */ break; } else { fwrite(fileTgtBuff, RWSIZE, 1, targetFile); /* buffÀÇ ³»¿ëÀ» file¿¡ ÀúÀå */ } }// else { writeSize -= RWSIZE; }// for(i=0; i< ((readSize/200000) + 1); i++){ fclose(srcFile); fclose(targetFile); free(fileSrcBuff); free(fileTgtBuff); return; }// if(readSize > RWSIZE){ #endif ///////////////////////////////////////////////////////////////////////////////////////// #ifdef DISP_desMain_fileState printf("mallocÇÒ Å©±â:%ld \n", dataSize*8); #endif fileSrcBuff = (char *)malloc(dataSize*8); /* BuffÀÇ memoryÇÒ´ç ¹× ÃʱâÈ­ */ fileTgtBuff = (char *)malloc(dataSize*8); memset(fileSrcBuff, 0, dataSize*8); /* ÇÒ´çµÈ °ø°£À» \0·Î ÃʱâÈ­ */ memset(fileTgtBuff, 0, dataSize*8); if(jobType == C2P){ /* C2PÀÏ°æ¿ì ÀúÀåµÈ file size¸¦ Àоî¿È */ fread(&writeSize, sizeof(long int), 1, srcFile); fgets(qprkDes, 100, srcFile); /* ¿ø·¡ file¸íÀ» Àоî¿È */ qprkDes[ strlen(qprkDes) -1] = '\0'; /* \n Á¦°Å */ strcpy(nameTemp, qprkDes); readSize -= sizeof(long int); #ifdef DISP_desMain_fileState printf("write size : %ld\n",writeSize); #endif }// if(jobType == C2P){ fread(fileSrcBuff, readSize, 1, srcFile); /* file³»¿ëÀ» buff¿¡ º¹»ç */ #ifdef DISP_desMain_fileState printf("file¿¡¼­ Àоî¿Â ³»¿ë\n%s\n", fileSrcBuff); #endif fclose(srcFile); ////////////////////////////////////////////////////////////////////////////////// startDes(jobType, dataSize, fileSrcBuff, fileTgtBuff); /* ¾Ïȣȭ º¹È£È­¸¦ ½ÃÀÛ */ //////////////////////////////////////////////////////////////////////////////// #ifdef DISP_desMain_fileState printf("job type : %d\n", jobType); printf("target file name: %s\n",qprkDes); /* test */ #endif if( (targetFile = fopen( qprkDes, "w+b" )) == NULL ){ /* target fileÀ» ¿¬´Ù */ printf("Target file open error!!!! -%s- \n", qprkDes); exit(0); }// if( (targetFile = fopen( nameTemp, "w" )) == NULL ){ if(jobType == P2C){ fwrite(&readSize, sizeof(long int), 1, targetFile); /* file size¸¦ ÀúÀå */ fprintf(targetFile,"%s\n",fileName); fwrite(fileTgtBuff, dataSize*8, 1, targetFile); /* buffÀÇ ³»¿ëÀ» file¿¡ ÀúÀå */ } else { fwrite(fileTgtBuff, writeSize, 1, targetFile); /* buffÀÇ ³»¿ëÀ» file¿¡ ÀúÀå */ }// else { fclose(targetFile); free(fileSrcBuff); free(fileTgtBuff); } /************************************************************** * des ¾Ïȣȭ, º¹È£È­¸¦ ÇÑ´Ù * jobType : P2C ¾Ïȣȭ, C2P º¹È£È­ * dataSize : srcDataÀÇ Å©±â / 8 + 1 * srcData °¡ ¾Ïȣȭ,º¹È£È­µÇ¾î tgtData¿¡ ÀúÀåµÈ´Ù **************************************************************/ void startDes(int jobType, int dataSize, char *srcData, char *tgtData ) { int srcBinary[64]={0,}, tgtBinary[64]={0,}, binaryBuff[64]={0,}; int leftData[32]={0,}, rightData[32]={0,}, swapBuff[32]={0,}; int tgtIndex=0; char textBuff[9]={'\0',}; int i, j, k; for(i=0, tgtIndex=0; i %d = %d + %d\n" , eBuff[i] , *(rightData + (MAT_EXP[i] -1)), MAT_EXP[i] -1); #endif }// for(i=0; i<48; i++){ for(i=0; i<48; i++){ /* eBuff xor key */ eBuffOut[i] = eBuff[i] ^ KEY[keyIndex][i]; #ifdef DISP_desRound_xor /* xor»óȲ È®ÀÎ */ printf("keyIndes :%d, i:%d, ", keyIndex, i); printf("eBuff xor key (eBuffOut = eBuff ^ key)->"); printf("%d = %d ^ %d\n",eBuffOut[i], eBuff[i], KEY[keyIndex][i]); #endif }// for(i=0; i<48; i++){ for(i=0, j=0, k=0; i<8; i++){ /* sBox Àû¿ë */ sboxRow = (eBuffOut[j+0] * 2) + eBuffOut[j+5]; sboxCol = (eBuffOut[j+1] * 8) + (eBuffOut[j+2] * 4) + (eBuffOut[j+3] * 2) + eBuffOut[j+4]; sboxValue = MAT_SBOX[i][sboxRow][sboxCol]; sboxOut[k] = ((sboxValue & 8) ? 1:0 ); sboxOut[k+1] = ((sboxValue & 4) ? 1:0 ); sboxOut[k+2] = ((sboxValue & 2) ? 1:0 ); sboxOut[k+3] = sboxValue & 1; #ifdef DISP_desRound_sboxValue /* xboxÀÇ ¼±ÅÃµÈ °ªÀ» Âï¾îº¸ÀÚ */ printf("sboxRow :%d, sboxCol :%2d, sbox value %d : %2d\n",sboxRow, sboxCol, i, sboxValue); printf("sboxOut : %d %d %d %d\n",sboxOut[k], sboxOut[k+1], sboxOut[k+2], sboxOut[k+3]); #endif j += 6; k += 4; }// for(i=0, k=0; i<8; i++){ for(i=0; i<32; i++) /* sboxOut ¿¡ p tableÀû¿ë */ permuOut[i] = sboxOut[ MAT_PERMU[i]-1 ]; for(i=0; i<32; i++){ /* permuOut xor leftData ¸¦ rightData¿¡ ÀúÀå*/ *(rightData+i) = *(leftData+i) ^ permuOut[i]; #ifdef DISP_desRound_xor /* xor»óȲ È®ÀÎ */ printf("left xor permu (rightData = leftData ^ permuOut)->"); printf("%d = %d ^ %d\n", *(rightData+i), *(leftData+i), permuOut[i]); #endif }// for(i=0; i<32; i++){ for(i=0; i<32; i++) /* ÷¿¡ º¹»çÇÑ leftFinalÀ» leftData¿¡ º¹»ç */ *(leftData+i) = leftFinal[i]; }// for(keyIndex=0; keyIndex<16; keyIndex++){ } /************************************************************** * 32bit swap **************************************************************/ void swap32bit(int *leftBit, int *rightBit, int *buffBit) { int i; for(i=0; i<32; i++) buffBit[i] = leftBit[i]; for(i=0; i<32; i++) leftBit[i] = rightBit[i]; for(i=0; i<32; i++) rightBit[i] = buffBit[i]; } /************************************************************** * 16°³ Å° ¸¸µé±â * keyÀÇ ÀÔ·Â ÀçÇÑÀº ¾øÁö¸¸ ³»ºÎÀûÀ¸·Î 8Byte¸¸ »ç¿ëÇÑ´Ù. **************************************************************/ void keyGenerate(char *keySrc) { int keySchedule[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}; int binaryKey[64] = {0,}; int pc1[56]={0,}; char tempKey[9]; int i, j, k, l, tmp1, tmp2, srcLen; if( (strlen(keySrc))>8 ) /* ÀÔ·ÂµÈ ¾ÏÈ£ÀÇ ±æÀÌ°¡ 8ÀÚ ÀÌ»óÀ̸é */ keyProc(keySrc); strncpy(tempKey, keySrc, 8); tempKey[8] = '\0'; srcLen = strlen( tempKey); char2binary(binaryKey, tempKey, srcLen); memset(tempKey, 0, 8); #ifdef DISP_keyGenerate_binary2char /* ±×³É Âï¾îº»°Å */ printf("\n\nkeyGenerate_binary2char\n"); for(i=0, k=0;i<8;i++){ for(j=0;j<8;j++){ printf("%d ",binaryKey[k]); k++; } printf("\n"); } printf("\n"); printf("\n"); printf("binary2char=:"); for(i=0; i<64; i += 8){ printf("%c",binary2char(&binaryKey[i])); }// for(i=0; i<56; i += 8){ printf("\n"); #endif for(i=0; i<56; i++) /* 64bit¸¦ 56bit·Î ÁÙÀ̴°Š*/ pc1[i] = binaryKey[ MAT_PC_1[i]-1 ]; #ifdef DISP_keyGenerate_leftShift /* left shift »óȲ È®ÀÎ */ printf("\n\n left shift\n"); #endif for(i=0; i<16; i++){ for(j=0; j%c\n", *(temp+srcLen-j)); }// for(i=0;i<4;i++){ // printf("\nkeyProc--->%s\n\n",keySrc); } /************************************************************** * char¸¦ 2Áø¼ö ÄÚµå·Î ¸¸µé±â * target : 2Áø¼ö Äڵ尡 ÀúÀåµÉ ¹è¿­ * char : 2Áø¼ö·Î ¸¸µé ¹®ÀÚ¿­ * srcLen : 2Áø¼ö·Î ¸¸µé ¹®ÀÚ¿­ÀÇ ±æÀÌ **************************************************************/ void char2binary(int *target, char *src, int srcLen) { int targetIndex=0, i, j; char oneChar,temp1, temp2; #ifdef DISP_char2binary /* char°¡ binaryµÇ´Â »óȲ º¸±â */ printf("orgkey :%s\n",src); #endif #ifdef DISP_char2binary_strlen /* char°¡ binaryµÇ´Â »óȲ º¸±â */ printf("%d ",strlen(src)); #endif for(i=0 ; i=0; j--){ temp1 = oneChar >> j; temp2 = temp1 & 0x0001; *(target+targetIndex) = (temp2 == 1 ? 1:0); targetIndex++; }// for(j=0;j<=8;j++){ }// for(i=0,srcLen;i<=srcLen;i++){ #ifdef DISP_char2binary /* char°¡ binaryµÇ´Â »óȲ º¸±â */ printf("\n\nfirst display of char2binary\n"); for(i=0,targetIndex=0; ii; j--) inTemp *= 2; chTemp += inTemp; }// if( *(src+i)) { }// for(i=0;i<8;i++){ temp=chTemp; return temp; } /************************************************************** * hele text **************************************************************/ void helpText() { printf("\n»ç¿ë¹ý : des [OPTION] [password] [file]\n\n"); printf("Option......\n"); printf("-c : ¾Ïȣȭ\n"); printf("-h : µµ¿ò¹Ð\n"); printf("-p : º¹È£È­\n\n"); printf("password.....\n"); printf("passwordÀÇ ¹®ÀÚ¿­Áß °ø¹éÀÌ ÀÖÀ»°æ¿ì \"·Î ¹­À»°Í\n"); printf("Example : \"pass word\"\n\n"); printf("file......\n"); printf("fileÀÇ À̸§Àº ¾Ïȣȭ½Ã .des¸¦ file name µÚ¿¡ ºÙÀÓ\n"); printf("º¹È£È­½Ã file³¡ÀÇ .des¸¦ Á¦°Å ¿ø·¡ file nameÀ» Ãâ·Â\n\n"); printf("¹ö±× ¸®Æ÷Æ® qprk@qprk.pe.kr\n\n"); exit(0); }