Base64编码的原理及C++实现代码
发布时间:2020-12-16 07:44:10 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 Base64编码在邮件中最为常见,呵呵,因为我最近就是在做邮箱报警,SMTP验证就是Base64编码用户名和密码进行验证的,并且图片为附件也是要 转换成base6
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
Base64编码在邮件中最为常见,呵呵,因为我最近就是在做邮箱报警,SMTP验证就是Base64编码用户名和密码进行验证的,并且图片为附件也是要 转换成base64编码的数据,然后再发送的。该编码使用64个明文来编码任意的二进制文件,它里面只使用了A-Z,a-z,0-9,+,/这64个字 符。编码里面还有“=”号啊,不过等号不属于编码字符,而是填充字符。
我在网上查了很多关于Base64编码代码,大都比较的复杂和冗长,所以,就自己按照原理写了一个。 base64编码原理: 1)base64的编码都是按字符串长度,以每3个8bit的字符为一组, 2)然后针对每组,首先获取每个字符的ASCII编码, 3)然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节 4)然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节 5)然后将这4个8bit的字节转换成10进制,对照Base64编码表 ,得到对应编码后的字符。 static const char* base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //chsrc为源数据,chdes为Base64编码后的数据,len为数据长度 void Base64_Code(unsigned char* chsrc,unsigned char* chdes,int len) { unsigned char char_array_3[3],char_array_4[4]; int i = 0,j = 0; while(len--) { char_array_3[i++] = *(chsrc++); if(3 == i) { 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++) *(chdes+i) = base64_chars[char_array_4[i]]; i = 0; chdes += 4; } } if(i) { for(j = i; j < 3; j++) char_array_3[j] = ' '; 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++) *(chdes++) = base64_chars[char_array_4[j]]; while((3 > i++)) *(chdes++) = '='; } *chdes = ' '; return; } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |