linux base64 c代码,base64编码和解码(c语言)

#include // base64 tables

static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

#define CHAR64(c)  (((c) < 0 || (c) > 127) ? -1 : index_64[(c)])

char * base64_encode(const unsigned char *value, int vlen);

unsigned char * base64_decode(const char *value, int *rlen);

static signed char index_64[128] = {

-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,

-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,

-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,

52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,

-1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,

15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,

-1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,

41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1

} ;

char *base64_encode(const unsigned char *value, int vlen) {

unsigned char oval = 0 ;

char *result = (char *)malloc((vlen * 4) / 3 + 5) ;

char *out = result;

while (vlen >= 3) {

*out++ = basis_64[value[0] >> 2];

*out++ = basis_64[((value[0] << 4) & 0x30) | (value[1] >> 4)];

*out++ = basis_64[((value[1] << 2) & 0x3C) | (value[2] >> 6)];

*out++ = basis_64[value[2] & 0x3F];

value += 3;

vlen -= 3;

}

if (vlen > 0) {

*out++ = basis_64[value[0] >> 2];

oval = (value[0] << 4) & 0x30 ;

if (vlen > 1) oval |= value[1] >> 4;

*out++ = basis_64[oval];

*out++ = (vlen < 2) ? '=' : basis_64[(value[1] << 2) & 0x3C];

*out++ = '=';

}

*out = '\0';

return result;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值