Programming
| No. | 140 |
| Name. | swindler |
| Subject. | base64 encode/decode |
| Main Cate. | C/C++ |
| Sub Cate. | |
| Date. | 2005-07-06 11:10 |
| Hit. | 3300 (211.109....) |
| File. | |
| Borland C++ Builder 에서 작성한 것임] #include <math.h> const char Base64Table[64]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int Base64Encode(const char *buftoenc,int bufsize,char *encbuf) { int i=0; int b64byte[5]; unsigned char *buftemp; buftemp=(unsigned char *)malloc(bufsize+2); strcpy(buftemp,buftoenc); if (fmod(bufsize,3)==1) { buftemp[bufsize]='\0'; buftemp[bufsize+1]='\0'; } if (fmod(bufsize,3)==2)buftemp[bufsize]='\0'; while (i<bufsize) { b64byte[0]=buftemp[i]>>2; b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4); b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6); b64byte[3]=buftemp[i+2]&0x3F; encbuf[i+(i/3)]=Base64Table[b64byte[0]]; encbuf[i+(i/3)+1]=Base64Table[b64byte[1]]; encbuf[i+(i/3)+2]=Base64Table[b64byte[2]]; encbuf[i+(i/3)+3]=Base64Table[b64byte[3]]; i+=3; } free(buftemp); if (fmod(bufsize,3)==0)return bufsize*8/6; if (fmod(bufsize,3)==1)return((bufsize+2)*8/6)-2; if (fmod(bufsize,3)==2)return((bufsize+1)*8/6)-1; return -1; } int Base64Decode(const char *buftodec,int bufsize,char *decbuf) { int i=0; unsigned char binbyte[4]; int cpos[5]; unsigned char *buftemp; buftemp=(unsigned char *)malloc(bufsize); strcpy(buftemp,buftodec); if (fmod(bufsize,4)==1) { buftemp[bufsize]='\0'; buftemp[bufsize+1]='\0'; buftemp[bufsize+2]='\0'; } if (fmod(bufsize,4)==2) { buftemp[bufsize]='\0'; buftemp[bufsize+1]='\0'; } if (fmod(bufsize,4)==3)buftemp[bufsize]='\0'; while (i<bufsize) { cpos[0]=strchr(Base64Table,buftemp[i])-Base64Table; cpos[1]=strchr(Base64Table,buftemp[i+1])-Base64Table; cpos[2]=strchr(Base64Table,buftemp[i+2])-Base64Table; cpos[3]=strchr(Base64Table,buftemp[i+3])-Base64Table; binbyte[0]=((cpos[0]<<2)|(cpos[1]>>4)); binbyte[1]=((cpos[1]<<4)|(cpos[2]>>2)); binbyte[2]=(((cpos[2]&0x03)<<6)|(cpos[3]&0x3f)); decbuf[i-(i/4)]=binbyte[0]; decbuf[i-(i/4)+1]=binbyte[1]; decbuf[i-(i/4)+2]=binbyte[2]; i+=4; } free(buftemp); if (fmod(bufsize,4)==0)return bufsize*6/8; if (fmod(bufsize,4)==1)return((bufsize+3)*6/8)-3; if (fmod(bufsize,4)==2)return((bufsize+2)*6/8)-2; if (fmod(bufsize,4)==3)return((bufsize+1)*6/8)-1; return -1; } [바로가기 링크] : http://coolx.net/cboard/develop/140 |
|
|
|
|
| [Modify] [Delete] | [Reply] [List] | |



Copyright © 1999-2017, swindler. All rights reserved.
367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)