Total Pageviews

Saturday, 10 October 2020

Linux中使用base64进行编解码

 base64编码的字符串用的挺多的……

编码

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

base64

 

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

echo "str" | base64

 

3. 将字符串str编码为base64字符串输出。注意与上面的差别。

echo -n "str" | base64

#echo -n 即为不输出换行

 

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

base64 file

 

解码

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

base64 -d

 

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

base64 -d -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.

 

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

echo "str" | base64 -d

 

4. 将base64编码的字符串str解码输出。 注意与上面的差别。

echo -n "str" | base64 -d

 

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

base64 -d file

使用示例

示例一

[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参数的处理结果的差别。


参考:http://codingstandards.iteye.com/blog/934928

No comments:

Post a Comment