`

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

阅读更多

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

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

用途说明

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

 

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

完整的base64定义可见 RFC 1421和 RFC 2045。编码后的数据比原始数据略长,为原来的\frac{4}{3}。在电子邮件中,根据RFC 822规定,每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-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编码的内容,解码输出。

 

使用示例

示例一

[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@node56 lic]#

[root@node56 lic]# echo -n "Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=" | base64 -d
CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a[root@node56 lic]#
注意上面几种不同使用方式输出信息的差别。
[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参数的处理结果的差别。

 

问题思考

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

 

相关资料

【1】维基百科 Base64

【2】RFCS  RFC 3548 - The Base16, Base32, and Base64 Data Encodings

【3】中国IT实验室 Linux下"base64"命令工具的使用

【4】LANPICE的鬼屋 Linux下利用base64破解Rayfile专用链

 

返回 我使用过的Linux命令系列总目录

 

6
1
分享到:
评论
4 楼 107x 2016-01-23  
不错,谢谢!
3 楼 codingstandards 2011-07-26  
superlittlefish 写道
在介绍命令的时候如果介绍命令的典型应用场景的话,感觉会更好.
很多人了解参数的含义, 却不知道这个命令什么时候用

这个建议不错,谢谢支持!
2 楼 superlittlefish 2011-07-26  
另外发现点击'顶' ,无效.
1 楼 superlittlefish 2011-07-26  
在介绍命令的时候如果介绍命令的典型应用场景的话,感觉会更好.
很多人了解参数的含义, 却不知道这个命令什么时候用

相关推荐

    linux c++ url和base64编解码

    linux系统c++实现的url和base64编解码 在webserver中会使用 自己实现的一个webserver,详见https://download.csdn.net/download/k117470154/10234299

    linux下base64

    3. **管道操作**:Base64也可以与其他命令结合使用,例如,你可以直接对命令输出进行编码或解码: ```bash cat somefile | base64 # 编码 cat encodeddata | base64 -d # 解码 ``` 4. **交互模式**:`base64 -i...

    linux下的base64编码转换工具及源码

    提供的`Base64.exe`可能是为Windows平台设计的一个Base64编码/解码工具,而在Linux环境中,通常使用上述的`base64`命令。不过,对于跨平台的测试或开发工作,了解多种环境下的Base64工具是有帮助的。 `Readme-说明....

    基于Linux 图像与BASE64编码互转.zip

    2. **图像与BASE64转换**:在Linux中,可以使用命令行工具或编程语言来实现这一过程。命令行工具如`base64`可用于编码,而`base64 -d`则用于解码。在编程中,我们可以利用C++、C或其他语言的库来处理。 3. **C++与C...

    c语言的base64编解码函数

    为了使用这些函数,你需要先解压文件,然后使用`make`命令编译`test_base64.c`,运行测试确保所有功能都正常工作。如果一切顺利,你可以将`base64_encode.c`和`base64_decode.c`集成到你的C语言项目中,以便在需要...

    Base64编码解码

    压缩包文件名“vc_linux_base64”暗示了压缩包中可能包含了VC6.0项目文件(可能是`.cpp`和`.h`文件)和/或Linux的源代码文件(可能是`.c`或`.cpp`),这些文件实现了Base64编码和解码的功能。用户可能需要这些源代码...

    libb64--base64编码解码库

    在C++中使用libb64库,可以先包含`libb64.h`,然后调用如`base64_encode_init()`、`base64_encode_inout()`和`base64_encode_finish()`等函数进行编码操作,对于解码则有`base64_decode_init()`、`base64_decode_in...

    base64_linux_C

    本主题将深入探讨在Linux环境下使用C语言实现Base64编码和解码的过程。 首先,让我们理解Base64的基本原理。Base64使用64个字符来表示二进制数据,这64个字符包括大小写字母(A-Z, a-z)、数字(0-9)以及"+"和"/...

    base64编码解码类(C++版)

    C++实现的base64编解码类,无其他依赖,兼容windows linux。 C++实现的base64编解码类,无其他依赖,兼容windows linux。

    密码解码工具Linux----CaptfEncoder-win-x64-2.1.0

    编码转换包括:Ascii 编码,Base64、Base 系列编码,Escape 编码,Hex 编码, Html entity 编码,莫尔斯电码,Quoted-printable(可打印字符引用编码),Shellcode 编码,Sql 编码,Tap Code(敲击码),Unicode ...

    Base64-De-Encoder:使用Base64进行解码和编码的命令行工具-开源

    Base64-De-Encoder是一个开源的命令行工具,它允许用户在Linux、Mac OS和Windows操作系统上对Base64编码的数据进行解码和编码,极大地便利了开发者和系统管理员的工作。 Base64编码的基本原理是将每3个字节(24位)...

    c++图片与base64互转

    - 解码Base64字符串得到原始的二进制数据,同样可以使用第三方库或自定义函数完成。 - 将解码后的二进制数据转换回`cv::Mat`对象,这通常涉及到分配内存和复制数据。 - 使用`cv::imwrite()`函数将`cv::Mat`对象...

    c++图片 base64互转

    这个例子展示了如何使用`Base64Converter`类将一个名为`input.jpg`的图片文件编码为Base64字符串,保存到文本文件`encoded.txt`,然后读取这个文件并解码回图片,最后将解码后的图片保存为`output.jpg`。 总结来说...

    将文件进行zip压缩并base64加密和解密

    解密时,先使用`Base64Util.decodeBase64StringToFile()`将BASE64字符串解码回ZIP文件,再使用相应的工具解压缩。 在实际开发中,这些工具类可以封装成一个完整的库,提供给其他部分代码使用。例如,你可以创建一个...

    跨平台base64编解码程序带C源代码

    Windows下可以直接执行exe,也可以使用VC编译 Linux/Unix下需要./configure && make && make install三部曲编译 base64 --help查看帮助,一看就会用

    Java Base64解码错误及解决方法

    Java Base64解码错误是指在Java中使用Base64解码时出现的异常错误,通常是由于Base64解码的输入参数不正确或解码过程中出现问题所致。下面我们将详细分析Java Base64解码错误的原因和解决方法。 一、 Java Base64...

    Base64编码工具_带源码

    这个工具不仅包含了图形用户界面(GUI),使得用户能够方便地进行Base64的编码和解码操作,而且其内部实现的编码和解码函数还支持Linux平台,这意味着代码可能采用了跨平台的编程技术,如POSIX标准或Qt库。...

    base-1.4.5.tar.gz

    BASE是一款基于PHP的可以搜索和实施安全事件的分析引擎,她的安全事件数据库来源于很多入侵检测系统...一个数据包浏览器(解码器);还可以根据时间、传感器、信号、协议和IP地址等生成状态图。 内含base-1.4.5.tar.gz

    Linux必学的60个命令(1)-安装与登陆

    - `unendcode` 和 `uudecode`:解码uuencode或base64编码的数据。 了解并熟练使用这些命令是Linux系统管理的基础,它们能帮助用户高效地执行日常任务,无论是系统维护、文件操作还是网络管理。通过实践和学习,你...

    SHA1加密,MD5加密,base64加解密的C++实现类

    - 解码函数将Base64字符串转换回原始二进制数据,去除末尾的填充字符。 在"yun_test"这个文件中,可能包含了上述三种加密方法的C++代码实现,以及相应的测试用例。测试用例通常是用已知输入和预期输出来验证算法...

Global site tag (gtag.js) - Google Analytics