这有个对char *的。
/* base64 en/decoder - Ver 1.01 - Programmed by hsj : 99.07.29 : 99.07.30 debug :) */ #include <stdio.h> #include <stdlib.h> int base64enc(char *,char *); int base64dec(char *,char *); void usage(char *); void main(int argc,char *argv[]) { int ret; if(argc<4) usage(argv[0]); if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0)) usage(argv[0]); switch(argv[1][1]) { case 'e': ret = base64enc(argv[2],argv[3]); break; case 'd': ret = base64dec(argv[2],argv[3]); break; } if(ret==0) printf("Done..."); else printf("Error. code[%d]\n",ret); } int base64enc(char *infile,char *outfile) { int i,len,llen = 0,pad = 0; unsigned char buf[4],buf2[4],lf = '\n'; FILE *fpi,*fpo; if((fpi=fopen(infile,"rb"))==0) return(-1); if((fpo=fopen(outfile,"wb"))==0) { fclose(fpi); return(-2); } for(;;) { if((len=fread((char *)buf,1,3,fpi))==0) break; if(len<3) { pad = 3 - len; for(i=len;i<3;i++) buf[i] = 0; } buf2[0] = buf[0] >> 2; buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4; buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6; buf2[3] = buf[2] & 0x3f; for(i=0;i<4;i++) { if(buf2[i]>=0 && buf2[i]<=25) buf2[i] = buf2[i] + 'A'; else if(buf2[i]>=26 && buf2[i]<=51) buf2[i] = buf2[i] - 26 + 'a'; else if(buf2[i]>=52 && buf2[i]<=61) buf2[i] = buf2[i] - 52 + '0'; else if(buf2[i]==62) buf2[i] = '+'; else if(buf2[i]==63) buf2[i] = '/'; } if(pad) { fwrite(buf2,4-pad,1,fpo); for(i=0;i<pad;i++) buf2[i] = '='; fwrite(buf2,pad,1,fpo); } else fwrite(buf2,4,1,fpo); llen += 4; if(llen==76) { fwrite(&lf,1,1,fpo); llen = 0; } } fwrite(&lf,1,1,fpo); fclose(fpi); fclose(fpo); return(0); } int base64dec(char *infile,char *outfile) { int i,pad = 0; unsigned char buf[4],buf2[4]; FILE *fpi,*fpo; if((fpi=fopen(infile,"rb"))==0) return(-1); if((fpo=fopen(outfile,"wb"))==0) { fclose(fpi); return(-2); } for(;;) { i = 0; while(i<4) { if(fread(&buf[i],1,1,fpi)==0) break; if((buf[i]!='\r')&&(buf[i]!='\n')) i++; } if(i==0) break; if(i!=4) { fclose(fpi); fclose(fpo); remove(outfile); return(-3); } for(i=0;i<4;i++) { if(buf[i]>='A' && buf[i]<='Z') buf[i] = buf[i] - 'A'; else if(buf[i]>='a' && buf[i]<='z') buf[i] = buf[i] - 'a' + 26; else if(buf[i]>='0' && buf[i]<='9') buf[i] = buf[i] - '0' + 52; else if(buf[i]=='+') buf[i] = 62; else if(buf[i]=='/') buf[i] = 63; else if(buf[i]=='=') { pad = 4 - i; for(;i<4;i++) buf[i] = 0; break; } else { fclose(fpi); fclose(fpo); remove(outfile); return(-4); } } buf2[0] = buf[0] << 2 | buf[1] >> 4; buf2[1] = buf[1] << 4 | buf[2] >> 2; buf2[2] = buf[2] << 6 | buf[3]; fwrite(buf2,3-pad,1,fpo); } fclose(fpi); fclose(fpo); return(0); } void usage(char *name) { printf("usage : $ %s [-e:d] target-file out-file\n",name); printf(" -e : execute base64 encode.\n"); printf(" -d : execute base64 decode.\n"); exit(0); }
/* base64 en/decoder - Ver 1.01 - Programmed by hsj : 99.07.29 : 99.07.30 debug :) */ #include <stdio.h> #include <stdlib.h> int base64enc(char *,char *); int base64dec(char *,char *); void usage(char *); void main(int argc,char *argv[]) { int ret; if(argc<4) usage(argv[0]); if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0)) usage(argv[0]); switch(argv[1][1]) { case 'e': ret = base64enc(argv[2],argv[3]); break; case 'd': ret = base64dec(argv[2],argv[3]); break; } if(ret==0) printf("Done..."); else printf("Error. code[%d]\n",ret); } int base64enc(char *infile,char *outfile) { int i,len,llen = 0,pad = 0; unsigned char buf[4],buf2[4],lf = '\n'; FILE *fpi,*fpo; if((fpi=fopen(infile,"rb"))==0) return(-1); if((fpo=fopen(outfile,"wb"))==0) { fclose(fpi); return(-2); } for(;;) { if((len=fread((char *)buf,1,3,fpi))==0) break; if(len<3) { pad = 3 - len; for(i=len;i<3;i++) buf[i] = 0; } buf2[0] = buf[0] >> 2; buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4; buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6; buf2[3] = buf[2] & 0x3f; for(i=0;i<4;i++) { if(buf2[i]>=0 && buf2[i]<=25) buf2[i] = buf2[i] + 'A'; else if(buf2[i]>=26 && buf2[i]<=51) buf2[i] = buf2[i] - 26 + 'a'; else if(buf2[i]>=52 && buf2[i]<=61) buf2[i] = buf2[i] - 52 + '0'; else if(buf2[i]==62) buf2[i] = '+'; else if(buf2[i]==63) buf2[i] = '/'; } if(pad) { fwrite(buf2,4-pad,1,fpo); for(i=0;i<pad;i++) buf2[i] = '='; fwrite(buf2,pad,1,fpo); } else fwrite(buf2,4,1,fpo); llen += 4; if(llen==76) { fwrite(&lf,1,1,fpo); llen = 0; } } fwrite(&lf,1,1,fpo); fclose(fpi); fclose(fpo); return(0); } int base64dec(char *infile,char *outfile) { int i,pad = 0; unsigned char buf[4],buf2[4]; FILE *fpi,*fpo; if((fpi=fopen(infile,"rb"))==0) return(-1); if((fpo=fopen(outfile,"wb"))==0) { fclose(fpi); return(-2); } for(;;) { i = 0; while(i<4) { if(fread(&buf[i],1,1,fpi)==0) break; if((buf[i]!='\r')&&(buf[i]!='\n')) i++; } if(i==0) break; if(i!=4) { fclose(fpi); fclose(fpo); remove(outfile); return(-3); } for(i=0;i<4;i++) { if(buf[i]>='A' && buf[i]<='Z') buf[i] = buf[i] - 'A'; else if(buf[i]>='a' && buf[i]<='z') buf[i] = buf[i] - 'a' + 26; else if(buf[i]>='0' && buf[i]<='9') buf[i] = buf[i] - '0' + 52; else if(buf[i]=='+') buf[i] = 62; else if(buf[i]=='/') buf[i] = 63; else if(buf[i]=='=') { pad = 4 - i; for(;i<4;i++) buf[i] = 0; break; } else { fclose(fpi); fclose(fpo); remove(outfile); return(-4); } } buf2[0] = buf[0] << 2 | buf[1] >> 4; buf2[1] = buf[1] << 4 | buf[2] >> 2; buf2[2] = buf[2] << 6 | buf[3]; fwrite(buf2,3-pad,1,fpo); } fclose(fpi); fclose(fpo); return(0); } void usage(char *name) { printf("usage : $ %s [-e:d] target-file out-file\n",name); printf(" -e : execute base64 encode.\n"); printf(" -d : execute base64 decode.\n"); exit(0); }
/* base64 en/decoder - Ver 1.01 - Programmed by hsj : 99.07.29 : 99.07.30 debug :) */ #include <stdio.h> #include <stdlib.h> int base64enc(char *,char *); int base64dec(char *,char *); void usage(char *); void main(int argc,char *argv[]) { int ret; if(argc<4) usage(argv[0]); if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0)) usage(argv[0]); switch(argv[1][1]) { case 'e': ret = base64enc(argv[2],argv[3]); break; case 'd': ret = base64dec(argv[2],argv[3]); break; } if(ret==0) printf("Done..."); else printf("Error. code[%d]\n",ret); } int base64enc(char *infile,char *outfile) { int i,len,llen = 0,pad = 0; unsigned char buf[4],buf2[4],lf = '\n'; FILE *fpi,*fpo; if((fpi=fopen(infile,"rb"))==0) return(-1); if((fpo=fopen(outfile,"wb"))==0) { fclose(fpi); return(-2); } for(;;) { if((len=fread((char *)buf,1,3,fpi))==0) break; if(len<3) { pad = 3 - len; for(i=len;i<3;i++) buf[i] = 0; } buf2[0] = buf[0] >> 2; buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4; buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6; buf2[3] = buf[2] & 0x3f; for(i=0;i<4;i++) { if(buf2[i]>=0 && buf2[i]<=25) buf2[i] = buf2[i] + 'A'; else if(buf2[i]>=26 && buf2[i]<=51) buf2[i] = buf2[i] - 26 + 'a'; else if(buf2[i]>=52 && buf2[i]<=61) buf2[i] = buf2[i] - 52 + '0'; else if(buf2[i]==62) buf2[i] = '+'; else if(buf2[i]==63) buf2[i] = '/'; } if(pad) { fwrite(buf2,4-pad,1,fpo); for(i=0;i<pad;i++) buf2[i] = '='; fwrite(buf2,pad,1,fpo); } else fwrite(buf2,4,1,fpo); llen += 4; if(llen==76) { fwrite(&lf,1,1,fpo); llen = 0; } } fwrite(&lf,1,1,fpo); fclose(fpi); fclose(fpo); return(0); } int base64dec(char *infile,char *outfile) { int i,pad = 0; unsigned char buf[4],buf2[4]; FILE *fpi,*fpo; if((fpi=fopen(infile,"rb"))==0) return(-1); if((fpo=fopen(outfile,"wb"))==0) { fclose(fpi); return(-2); } for(;;) { i = 0; while(i<4) { if(fread(&buf[i],1,1,fpi)==0) break; if((buf[i]!='\r')&&(buf[i]!='\n')) i++; } if(i==0) break; if(i!=4) { fclose(fpi); fclose(fpo); remove(outfile); return(-3); } for(i=0;i<4;i++) { if(buf[i]>='A' && buf[i]<='Z') buf[i] = buf[i] - 'A'; else if(buf[i]>='a' && buf[i]<='z') buf[i] = buf[i] - 'a' + 26; else if(buf[i]>='0' && buf[i]<='9') buf[i] = buf[i] - '0' + 52; else if(buf[i]=='+') buf[i] = 62; else if(buf[i]=='/') buf[i] = 63; else if(buf[i]=='=') { pad = 4 - i; for(;i<4;i++) buf[i] = 0; break; } else { fclose(fpi); fclose(fpo); remove(outfile); return(-4); } } buf2[0] = buf[0] << 2 | buf[1] >> 4; buf2[1] = buf[1] << 4 | buf[2] >> 2; buf2[2] = buf[2] << 6 | buf[3]; fwrite(buf2,3-pad,1,fpo); } fclose(fpi); fclose(fpo); return(0); } void usage(char *name) { printf("usage : $ %s [-e:d] target-file out-file\n",name); printf(" -e : execute base64 encode.\n"); printf(" -d : execute base64 decode.\n"); exit(0); }
我想要这种的,这是个加密的
CString Encode TextBase64(const CString& sText)
{
unsigned char cChar[255];
int nIndex1, nIndex2, nIndex3, nIndex4;
int nChars;
CString sBase64 = "";
char cTable[64 + 1];
CString sTemp; cTable[0] = 'A';
cTable[1] = 'B';
cTable[2] = 'C';
cTable[3] = 'D';
cTable[4] = 'E';
cTable[5] = 'F';
cTable[6] = 'G';
cTable[7] = 'H';
cTable[8] = 'I';
cTable[9] = 'J';
cTable[10] = 'K';
cTable[11] = 'L';
cTable[12] = 'M';
cTable[13] = 'N';
cTable[14] = 'O';
cTable[15] = 'P'; cTable[16] = 'Q';
cTable[17] = 'R';
cTable[18] = 'S';
cTable[19] = 'T';
cTable[20] = 'U';
cTable[21] = 'V';
cTable[22] = 'W';
cTable[23] = 'X';
cTable[24] = 'Y';
cTable[25] = 'Z';
cTable[26] = 'a';
cTable[27] = 'b';
cTable[28] = 'c';
cTable[29] = 'd';
cTable[30] = 'e';
cTable[31] = 'f'; cTable[32] = 'g';
cTable[33] = 'h';
cTable[34] = 'i';
cTable[35] = 'j';
cTable[36] = 'k';
cTable[37] = 'l';
cTable[38] = 'm';
cTable[39] = 'n';
cTable[40] = 'o';
cTable[41] = 'p';
cTable[42] = 'q';
cTable[43] = 'r';
cTable[44] = 's';
cTable[45] = 't';
cTable[46] = 'u';
cTable[47] = 'v'; cTable[48] = 'w';
cTable[49] = 'x';
cTable[50] = 'y';
cTable[51] = 'z';
cTable[52] = '0';
cTable[53] = '1';
cTable[54] = '2';
cTable[55] = '3';
cTable[56] = '4';
cTable[57] = '5';
cTable[58] = '6';
cTable[59] = '7';
cTable[60] = '8';
cTable[61] = '9';
cTable[62] = '+';
cTable[63] = '/'; cTable[64] = '='; nChars = sText.GetLength();
for (int nPos = 0; nPos < nChars; nPos++)
{
cChar[nPos] = sText.GetAt(nPos);
}
for (nPos = 0; nPos < nChars; nPos += 3)
{
if (nPos + 1 >= nChars) cChar[nPos + 1] = '0';
if (nPos + 2 >= nChars) cChar[nPos + 2] = '0';
nIndex4 = ( cChar[nPos + 2] & 0x3F ) & 0x3F;
nIndex3 = ( ((cChar[nPos + 1] & 0x0F) << 2)
| ((cChar[nPos + 2] & 0xC0) >> 6) ) & 0x3F;
nIndex2 = ( ((cChar[nPos] & 3) << 4)
| ((cChar[nPos + 1] & 0xF0) >> 4) ) & 0x3F;
nIndex1 = ( (cChar[nPos] & 0xFC) >> 2 ) & 0x3F;
if (nPos + 1 >= nChars)
{
nIndex3 = 64;
nIndex4 = 64;
} // end if
if (nPos + 2 >= nChars)
{
nIndex4 = 64;
} // end if
sTemp.Format("%c%c%c%c",
cTable[nIndex1],
cTable[nIndex2],
cTable[nIndex3],
cTable[nIndex4]);
sBase64 += sTemp;
} // End for return sBase64;
}