linux c base64编码解码

//base64.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

extern char *base64_decode(const char*,char **);

extern char *base64_encode(const char*,char **);
//base64.c
#include "base64.h"

static char base64_table[255];

void base64_tableinit()

{

   int i,j;

   bzero(base64_table,255);

        for(j=0,i='A';i<='Z';i++) /*填base64编码表*/

                base64_table[i]=j++;

        for(i='a';i<='z';i++)

                base64_table[i]=j++;

        for(i='0';i<='9';i++)

                base64_table[i]=j++;

        base64_table['+']=j++;

        base64_table['/']=j++;

        base64_table['=']=j;

}

char *base64_decode(const char *cptr,char **rptr)

{

        char *res;

        int clen,len;

        static int init=0;

        if(cptr==NULL)

                return NULL;

        len=strlen(cptr);

        if(len%4) /*编了码的字符绝对是4的倍数*/

                return NULL;

        if(!init)

          {

                init=1;

                base64_tableinit();

          }

        clen=len/4;

        if((res=malloc(len-clen))==NULL)

                return NULL;

        for(*rptr=res;clen--;)

          {

                *res=base64_table[*cptr++]<<2&0xfc;         /*cptr后六位移动到最高位*/

                *res++|=base64_table[*cptr]>>4;               /*跟着下个字符低两位给res低两位*/

        *res=base64_table[*cptr++]<<4&0xf0;               /*填充res高四位其它清0*/

                *res++|=base64_table[*cptr]>>2&0x0f;    /*字符前六位移到低六位取低四位*/

                *res=base64_table[*cptr++]<<6;

                if(*cptr!='=')                                                 /*=号乎略*/

                   *res++|=base64_table[*cptr++];

          }

        return *rptr;

}

char *base64_encode(const char *cptr,char **rptr)

{

        char *res;

        int i,clen,len;

        len=strlen(cptr);

        clen=len/3;

        if(cptr==NULL||(res=malloc(clen+3*2+len))==NULL)

                  return NULL;

        for(*rptr=res;clen--;)

          {

                *res++=*cptr>>2&0x3f;          /*取ptr高6位放入res低6位*/

                *res=*cptr++<<4&0x30;          /*移动ptr最低2位到高6位然后清0其 它位*/

                *res++|=*cptr>>4;                  /*取ptr高4位给res低4位*/

                *res=(*cptr++&0x0f)<<2;        /*取ptr低4位移动到高6位*/

                *res++|=*cptr>>6;                  /*取ptr高2位给res低2位*/

                *res++=*cptr++&0x3f;

          }

        if(i=len%3)                                       /*处理多余字符只有两种情况多一个或者两个字符*/

          {

                if(i==1)                                    /*根据base64编码补=号*/

                  {

                        *res++=*cptr>>2&0x3f;

                        *res++=*cptr<<4&0x30;

                        *res++='=';

                        *res++='=';

                  }

                else

                  {

                        *res++=*cptr>>2&0x3f;

                        *res=*cptr++<<4&0x30;

                        *res++|=*cptr>>4;

                        *res++=(*cptr&0x0f)<<2;

                        *res++='=';

                  }

          }

        *res='=';                                               /*保证最后结位为=结束原因是因为base64里有为0的编码*/

        for(res=*rptr;*res!='=';res++)

       *res="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[*res];

        rptr[0][strlen(*rptr)-1]='\0';                 /*去掉最后一个=号*/

        return *rptr;

}
//main.c
#include "base64.h"

int main(void)
{
    char *src="abc";
    char *buf;
    //base64编码
    base64_encode(src,&buf);
    printf("base64 encode:%s\n",buf);
    char *dec_buf;
    //base64解码
    base64_decode(buf,&dec_buf);
    printf("base64 decode:%s\n",dec_buf);

    free(buf);
    free(dec_buf);
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统下,可以使用C++来实现Base64编码解码。以下是一个示例代码: ```cpp #include <iostream> #include <string> #include <vector> const std::string base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; std::string base64_encode(const std::string& input) { std::string encoded; int i = 0; int j = 0; unsigned char char_array_3[3]; unsigned char char_array_4[4]; for (const auto& c : input) { char_array_3[i++] = c; if (i == 3) { char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); char_array_4[3] = char_array_3[2] & 0x3f; for (i = 0; i < 4; i++) { encoded += base64_chars[char_array_4[i]]; } i = 0; } } if (i > 0) { for (j = i; j < 3; j++) { char_array_3[j] = '\0'; } char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); char_array_4[3] = char_array_3[2] & 0x3f; for (j = 0; j < i + 1; j++) { encoded += base64_chars[char_array_4[j]]; } while (i++ < 3) { encoded += '='; } } return encoded; } int main() { std::string input = "Hello, World!"; std::string encoded = base64_encode(input); std::cout << "Base64 encoded string: " << encoded << std::endl; return 0; } ``` 这段代码定义了一个`base64_encode`函数,用于将输入字符串进行Base64编码。在`main`函数中,我们将字符串"Hello, World!"进行编码,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值