Linux base64 --用base64编解码

用途说明

base64是一种常用的简单的编解码方式。以下内容摘自维基百科。

 

维基百科 Base64 写道

在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号「+」,斜杠「/」,一共64个字 符,等号「=」用来作为后缀用途。

 

完整的base64定义可见 RFC1421和 RFC 2045。编码后的数据比原始数据略长,为原来的\frac{4}{3}。在电子邮件中,根据RFC822规定,每76个字符,还需要加上一个回车换行。可以估算编码后数据长度大约为原长的135.1%。

 

转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,於緩衝區中剩下的bit用0补足。然后,每次取出6(因为26 = 64)个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码 后的输出。不断进行,直到全部输入数据转换完成。

 

如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;如果最後剩下一個輸入數據,編碼結果後加2個「=」;如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。

 

较高版本的Linux提供了命令行方式的base64编码和解码。

 

什么时候需要用到这个命令?(2011.08.01补充)

在程序中经常弄些License之类的,超过期限或者换台机器就不让使用 ,以实现对自己或公司的劳动成果进行保护 。其实就是一个加密的字符串,里面包括过期时间、功能限制、网卡MAC地址等验证信息,就可以使用base64对这样的信息简单的进行加密和解密。至少我在一些程序中就是这么用的。

 

常用方式

格式:base64

从标准输入中读取数据,按Ctrl+D结束输入。将输入的内容编码为base64字符串输出。

 

格式:echo"str" | base64

将字符串str+换行 编码为base64字符串输出。

 

格式:echo -n "str" | base64

将字符串str编码为base64字符串输出。注意与上面的差别。(2011.08.01 补充)

 

格式:base64 file

从指定的文件file中读取数据,编码为base64字符串输出。

 

格式:base64 -d

从标准输入中读取已经进行base64编码的内容,解码输出。

 

格式:base64 -d -i

从标准输入中读取已经进行base64编码的内容,解码输出。加上-i参数,忽略非字母表字符,比如换行符。

man base64 写道

-i, --ignore-garbage

When decoding,ignore non-alphabet characters.

 

use --ignore-garbageto attempt to recover from non-alphabet characters (such as newlines) in theencoded stream.

 

格式:echo"str" | base64 -d

将base64编码的字符串str+换行 解码输出。

 

格式:echo -n "str" | base64 -d

将base64编码的字符串str解码输出。 注意与上面的差别。(2011.08.01 补充)

 

格式:base64 -d file

从指定的文件file中读取base64编码的内容,解码输出。

 

使用示例

示例一

[root@web ~]# base64

hello

Ctrl+D aGVsbG8K

[root@web ~]#

[root@web ~]#

[root@web ~]# base64 -d

aGVsbG8K

Ctrl+D hello

base64: invalid input

[root@web ~]#

你会发现,base64命令会输出 base64: invalid input,似乎它把按Ctrl+D后的空行也作为输入来处理了。

 

[root@web ~]# echo "hello" | base64

aGVsbG8K

[root@web ~]# echo "aGVsbG8K" | base64 -d

hello

base64: invalid input

[root@web ~]# echo -n "aGVsbG8K" | base64 -d

hello

[root@web ~]#

使用echo输出字符串时,如果没有-n参数会自动添加换行符,这会令base64命令发晕。

网上有些文章说到了这个事情。

 

示例二

[root@web ~]# cat >1.txt

hello

world

Ctrl+D

[root@web ~]# base64 1.txt

aGVsbG8Kd29ybGQK

[root@web ~]# base64 1.txt >2.txt

[root@web ~]# base64 -d 2.txt

hello

world

base64: invalid input

[root@web ~]#

 

示例三

[root@node56 lic]# base64

CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a

Ctrl+D

Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWEK

[root@node56 lic]# echo"Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE="| base64 -d

CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91abase64:invalid input

[root@node56 lic]# echo"Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE="| base64 -d -i

CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a[root@node56lic]#

[root@node56 lic]# echo -n"Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE="| base64 -d

CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a[root@node56lic]#

注意上面几种不同使用方式输出信息的差别。

[root@node56 lic]#

[root@node56 lic]# echo"CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a" | base64

Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWEK

[root@node56 lic]# echo -n"CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a" | base64

Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=

注意-n参数的处理结果的差别。

 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值