Base-64编码及Perl实现

Base-64编码用于将字节序列转换为HTTP首部安全的文本格式,通过拆分8位字节为6位并映射到64字符字母表。Perl中的MIME::Base64模块提供了Base-64的编码和解码功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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」
文本Man
ASCII编码7797110
二进制位010011010110000101101110
索引1922546
Base64编码TWFu

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


Base64索引表:

ValueChar ValueChar ValueChar ValueChar
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

Perl实现

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

#!/usr/bin/perl

use 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值