C语言编写base64加密程序

来源:互联网 发布:扣丁学堂安卓视频源码 编辑:程序博客网 时间:2024/05/16 19:03
#include <windows.h>#include <stdio.h>#include <WinSock.h>#include <iostream>using namespace std;#pragma comment(lib, "ws2_32.lib")char convert_to_base64_char(char uc){    if(uc<26) {        return 'A'+uc;    }    if(uc <52 && uc>=26 ) {        return 'a'+uc-26;    }    if( uc <62 && uc>=52) {        return '0' + (uc - 52);    }    if(uc == 62) {        return '+';    }    return '/';}void encode_to_base64(char *dbuf,char *src,int len){    char t='\0',t2='\0',t3='\0';    int i=0;    for(i=0; i<len/3; i++) {        t=src[i*3+0];        dbuf[i*4+0]= convert_to_base64_char(((t>>2) & 0x3f));///1        memset(&t,0,sizeof(char));        t2=src[i*3+0];        t3=src[i*3+1];        dbuf[i*4+1]=convert_to_base64_char(((((t2<<6 & 0xc0)>>2) & 0x30) | (t3>>4 & 0x0f)));///2        memset(&t2,0,sizeof(char));        memset(&t3,0,sizeof(char));        t2=src[i*3+1];        t3=src[i*3+2];        dbuf[i*4+2]=convert_to_base64_char(((((t2<<4)& 0xf0)>>2) & 0x3c) | ((t3>>6) & 0x03));///3        memset(&t2,0,sizeof(char));        memset(&t3,0,sizeof(char));        t=src[i*3+2];        dbuf[i*4+3]=convert_to_base64_char((((t<<2)&0xfc)>>2) & 0x3f);///4        memset(&t,0,sizeof(char));    }    if(len%3==1) {        t=src[i*3+0];        dbuf[i*4+0]=convert_to_base64_char((t>>2) & 0x3f);        memset(&t,0,sizeof(char));        t=src[i*3+0];        dbuf[i*4+1]=convert_to_base64_char((((t<<6) & 0xc0)>>2) & 0x30 );        dbuf[i*4+2]='=';        dbuf[i*4+3]='=';        memset(&t,0,sizeof(char));        return ;    }    if(len%3==2) {        t2=src[i*3+0];        dbuf[i*4+0]=convert_to_base64_char((t2>>2) & 0x3f);        memset(&t2,0,sizeof(char));        t2=src[i*3+0];        t3=src[i*3+1];        dbuf[i*4+1]=convert_to_base64_char(((((t2<<6 & 0xc0)>>2) & 0x30) | (t3>>4 & 0x0f)));        memset(&t2,0,sizeof(char));        memset(&t3,0,sizeof(char));        t3=src[i*3+1];        dbuf[i*4+2]=convert_to_base64_char((t3<<4 & 0xf0)>>2 & 0x3c);        memset(&t3,0,sizeof(char));        dbuf[i*4+3]='=';        return ;    }}int main(){    char *a="你好测试文件试试 管不 管用";    char b[2120]= {'\0'};    encode_to_base64(b,a,strlen(a));    printf("%s\n",b);    return 0;}
测试结果:5L2g5aW95rWL6K+V5paH5Lu26K+V6K+VIOeuoeS4jSDnrqHnlKg=
有空再写个解密程序
0 0