Base-64编码及Perl实现

来源:互联网 发布:多个表格数据自动汇总 编辑:程序博客网 时间:2024/06/07 22:32

2012-11-04 wcdj

Base-64编码

Base-64编码可以将任意一组字节转换成较长的(扩大了33%)常见文本字符序列,从而可以合法地作为HTTP首部字段值。即,Base-64编码将用户输入或二进制数据打包成一种安全的格式,将其作为HTTP首部字段的值发送出去,而无须担心其中包含会破坏HTTP分析程序的冒号、换行符或二进制值。

8位到6位

Base-64编码将一个8位字节拆分为6位的片段,并为每个6位的片段分配一个字符(Base-64字母表中的64个字符之一,0~63),这64个字符中包含26个大写字母、26个小写字母、10个数字、‘+’和‘/’2个字符,共64个字符,另外还使用了特殊字符‘=’。

Base-64填充

Base-64编码收到一个8位字节序列,将这个二进制序列流划分成6位的块。但二进制序列有时不能正好平均地分成6位的块,在这种情况下,就在序列末尾填充零位,使二进制序列的长度成为24的倍数(即,6和8的最小公倍数)。

对已填充的二进制串进行编码时,任何完全填充(不包含原始数据中的位)的6位组都由特殊的第65个符号‘=’表示;如果6位组是部分填充的,就将填充的位设置为0。

  • 编码「Man」
文本ManASCII编码7797110二进制位010011010110000101101110索引1922546Base64编码TWFu

在此例中,Base64算法将三个字符编码为4个字符


Base64索引表:

ValueChar ValueChar ValueChar ValueChar0A16Q32g48w1B17R33h49x2C18S34i50y3D19T35j51z4E20U36k5205F21V37l5316G22W38m5427H23X39n5538I24Y40o5649J25Z41p57510K26a42q58611L27b43r59712M28c44s60813N29d45t61914O30e46u62+15P31f47v63/

Perl实现

MIME::Base64是Perl中的Base-64编/解码模块。

#!/usr/bin/perluse MIME::Base64;printf("orignal string is 'Man'\n");$encoded = encode_base64('Man');printf("after base64 encoded is: %s", $encoded);$decoded = decode_base64($encoded);printf("after base64 decoded is: %s\n\n", $decoded);printf("\nencode_base64\n");# YTph$encoded1 = encode_base64('a:a');print $encoded1;# YTphYQ==$encoded2 = encode_base64('a:aa');print $encoded2;# YTphYWE=$encoded3 = encode_base64('a:aaa');print $encoded3;# YTphYWFh$encoded4 = encode_base64('a:aaaa');print $encoded4;printf("\ndecode_base64\n");$decoded1 = decode_base64($encoded1);print $decoded1 ."\n";$decoded2 = decode_base64($encoded2);print $decoded2 ."\n";$decoded3 = decode_base64($encoded3);print $decoded3 ."\n";$decoded4 = decode_base64($encoded4);print $decoded4 ."\n";system(pause);


参考:

http://zh.wikipedia.org/wiki/Base64


原创粉丝点击