openssl-base64编码

Posted by 周思进 on April 17, 2022

本文在以前笔记上做了命令补充~
平常工作中偶尔会用到 base64 进行简单的数据编码转换,比如在安全方面,对于一切外部输入都是不可信任的,如无需存储原始输入,可做替换处理,将内容进行HASH和base64编码是常用的处理手段。或者将二进制内容转换成字符串进行传输等操作。

一、原理

1、将三个字节转换成四个字节:三个字节24位,分成四组,再在每个6位前面添加两个0,所得的字节值在0-63之间。而0-63之前有许多不可打印的字符,则进行如下转换
0~25: A~Z
26~51: a~z
52~61: 0~9
62: +
63: -

2、不足三个字节的用等号填充
比如最后待编码处理还剩2个字节,即16位。进行分组后,(6位、6位、4位、0位),第三个分组除了前面要添加两个0,后面还要添加两个0。前面三个分组仍旧按数组对应进行转换,最后一个分组用‘=’字符进行替换。只有一个字节的时候也做相似处理。

比如字符‘1’进行编码,其对应二进制是 00110001,则分组后为 001100,010000,只有2个分组,那么后面2个分组只能用‘=’替待,前2个转成对应字符拼接后就是 ‘MQ==’


二、openssl 命令base64编码

1、对字符‘1’进行 base64 编码

$echo -n "1" | openssl base64
MQ==

也可以直接敲命令openssl base64然后直接回车,输入想要编码的字符,然后不要敲回车,连按两次 ctrl+d 即可(此方式使用不便,并不推荐)。

选项说明:
-n 表示字符串不带回车符(可以通过echo 不带-n选项写字符到文件,然后通过vim打开该文件,再用命令:set invlist,就可以看到$回车符),否则编码的字符会带上回车符,如下

$ echo "1" | openssl base64
MQo=

对 base64 编码进行解码操作

[email protected]:~/nfs/test/base64 $ echo MQ== | openssl base64 -d
[email protected]:~/nfs/test/base64 $


2、对文件进行 base64 编码

$ echo -n "1" > in.file
$ openssl base64 -in in.file -out out.file
$ cat out.file
MQ==

选项说明:
-in 指定要编码的文件
-out 指定编码结果输出文件

对文件进行解码操作

[email protected]:~/nfs/test/base64 $ openssl base64 -d -in out.file
[email protected]:~/nfs/test/base64 $