C语言编写base64加密程序

#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=
有空再写个解密程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值