说明: 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,於緩衝區中剩下的bit用0补足。然后,每次取出6(因为26 = 64)个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。 如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;如果最後剩下一個輸入數據,編碼結果後加2個「=」;如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。 较高版本的Linux提供了命令行方式的base64编码和解码。 在程序中经常弄些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-garbage to attempt to recover from non-alphabet characters (such as newlines) in the encoded stream. # echo "str" | base64 -d //将base64编码的字符串str+换行 解码输出。 # echo -n "str" | base64 -d //将base64编码的字符串str解码输出。 注意与上面的差别。(2011.08.01 补充) # base64 -d file //从指定的文件file中读取base64编码的内容,解码输出。
# base64 hello Ctrl+D aGVsbG8K # base64 -d aGVsbG8K Ctrl+D hello base64: invalid input 你会发现,base64命令会输出 base64: invalid input,似乎它把按Ctrl+D后的空行也作为输入来处理了。 # echo "hello" | base64 aGVsbG8K # echo "aGVsbG8K" | base64 -d hello base64: invalid input # echo -n "aGVsbG8K" | base64 -d hello 使用echo输出字符串时,如果没有-n参数会自动添加换行符,这会令base64命令发晕。网上有些文章说到了这个事情。 示例二 # cat >1.txt hello world Ctrl+D # base64 1.txt aGVsbG8Kd29ybGQK # base64 1.txt >2.txt # base64 -d 2.txt hello world base64: invalid input
# base64 CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a Ctrl+D Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWEK # echo "Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=" | base64 -d CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a base64: invalid input # echo "Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=" | base64 -d -i CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a[root@lnmp1 ~]# # echo -n "Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=" | base64 -d CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a[root@lnmp1 ~]# 注意上面几种不同使用方式输出信息的差别。 # echo "CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a" | base64 Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWEK # echo -n "CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a" | base64 Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE= 注意-n参数的处理结果的差别。 (责任编辑:IT) |