Base64的编解码方法.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Base64的编解码方法

  Base64是一种很常用的编码方式,利用它可以将任何二进制的字符编码到可打印的64个字符之中, 这样,不管是图片,中文文本等都可以编码成只有ASCII的纯文本。至于为什么要进行这个转换呢, 最初主要使用在EMail领域,早期的一些邮件网关只识别ASCII, 如果发现邮件里有其他字符,就会将它们过滤掉,这样中文的邮件,有图片附件的邮件在这些网关上就会发生问题,于是将中文和图片都使用base64编码然后传输,接受后再解码就客服了这个问题了。 Base64除了可以使用在相似场合,还可以用作简单的加密等等。下面介绍下Base64的方法: 首先是Base64中 可能出现的所有字符: 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y 所有的字符就 是A~Z,a~z,0~9,+,/共64个,以及末 尾的填充字符= 编码的方法是: 从输入缓冲中依 次取出字符,第一个字符的,从最高位开始取出6个 bit,这6个bit的值的范围在0~63,将这个值作为索引 , 对应上面的表格,找到相应的字符,这便是 第一个Base64后的字符,然后将第一个字符的低2位与 第二个字符的高4位组成6个bit, 同样查表得到第二个 Base64字符,以此类推,从左向右没凑足6个bit就转 换成一个Base64字符,由于输入缓冲中每3个字符 包含24个bit,这24个bit正好可以转成4个 Base64字符,所以没3个字符能组成一个转换循环,如 果输入缓冲中字符的个数是3 的整数倍,那么结果就 是4的整数倍,两者的长度是3:4的关系,但是如果输 入字符不是3的整数倍呢?这就涉及到了末尾填充问题 。 输入缓冲的末尾 可能余下一个字符,或两个字符: SXS好问提示,如果余下一个字 符,前6个bit转换成Base64,剩下的低2位要右边补0 ,凑成6bit,然后转换成Base64,为了让解析者了解 这个 情况,在输出缓冲的最后要补上两个=。 如果余下两个字符,同样转换出两个Base64 字符后,在剩下的4个bit右边补0,凑成6bit,然后转 换成Base64,同样在输出缓冲 的末尾要补上一个= 。 由此可见Base64 后的字符串,长度一定是4的整数倍,末尾有一个,两 个或没有=。 要注意的是为了兼容有些邮件服务器, Base64后的字符串经常要插入来确保每一行 不超过76个字符,解析时要跳过它们。 好了,原理就是 这样的,是不是很简单,就是取3个转成4个,好了, 上代码: 首先是编码: const BYTE Base64ValTab[65] = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/; #define AVal(x) Base64ValTab[x] int CSeeBase64Dlg::EncodeBase64(char * pInput, char * pOutput) { int i = 0; int loop = 0; int remain = 0; int iDstLen = 0; int iSrcLen = (int)strlen(pInput); loop = iSrcLen/3; remain = iSrcLen%3; // also can encode native char one by one as decode method // but because all of char in native string is to be encoded so encode 3-chars one time is easier. for (i=0; i loop; i++) {

文档评论(0)

juhui05 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档