Friday, July 1, 2011

base64转码


我使用过的Linux命令之base64 - 用base64编解码

本文链接:http://codingstandards.iteye.com/blog/934928   (转载请注明出处)

用途说明

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

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

常用方式

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

格式:echo "str" | base64
将字符串str编码为base64字符串输出。

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

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

格式:echo "str" | base64 -d
将base64编码的字符串str解码输出。

格式: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 ~]#

问题思考

1. 怎么解释base64: invalid input这样的问题?看来只有看看它的源代码了。

相关资料

【1】维基百科 Base64
【3】中国IT实验室 Linux下"base64"命令工具的使用

No comments: