有谁能解释一下?
[vagrant@centos ~]$ echo "10IXydrdsc4DVAgxzrXldNw5GMeVAHKG:TAO04JuWz4PBVWYm" | base64
MTBJWHlkcmRzYzREVkFneHpyWGxkTnc1R01lVkFIS0c6VEFPMDRKdVd6NFBCVldZbQo=
[vagrant@centos ~]$ echo "MTBJWHlkcmRzYzREVkFneHpyWGxkTnc1R01lVkFIS0c6VEFPMDRKdVd6NFBCVldZbQ==" | base64 -d
10IXydrdsc4DVAgxzrXldNw5GMeVAHKG:TAO04JuWz4PBVWYm
Run Code Online (Sandbox Code Playgroud)
第一个字符串o=在末尾编码,但最后编码的字符串==代替,解码为相同的原始字符串...
GNU bash,版本4.1.2(1)-release(x86_64-redhat-linux-gnu)
Har*_*rry 10
比较这些
echo "10IXydrdsc4DVAgxzrXldNw5GMeVAHKG:TAO04JuWz4PBVWYm" | base64 | od -c
echo "MTBJWHlkcmRzYzREVkFneHpyWGxkTnc1R01lVkFIS0c6VEFPMDRKdVd6NFBCVldZbQ==" | base64 -D | od -c
echo "MTBJWHlkcmRzYzREVkFneHpyWGxkTnc1R01lVkFIS0c6VEFPMDRKdVd6NFBCVldZbQo=" | base64 -D | od -c
Run Code Online (Sandbox Code Playgroud)
如果我们在使用echo时没有发送换行符o,那么请看看这个......
echo -n "10IXydrdsc4DVAgxzrXldNw5GMeVAHKG:TAO04JuWz4PBVWYm" | base64
Run Code Online (Sandbox Code Playgroud)
这是一个的被编码,使该换行o中o=
该=是填充和它可能不会永远存在.看看这里..
https://en.wikipedia.org/wiki/Base64#Padding
不同的实现也可以使用不同的填充字符.你可以在这里看到一些不同之处
https://en.wikipedia.org/wiki/Base64#Variants_summary_table
来自RFC
3.2.填充编码数据
在某些情况下,不需要或使用在基本编码数据中使用填充("=").在一般情况下,当不能进行关于传输数据大小的假设时,需要填充以产生正确的解码数据.
实现必须在编码数据的末尾包括适当的填充字符,除非引用本文档的规范另有明确说明.
base64和base32字母表使用填充,如下面第4和第6节所述,但base16字母表不需要它; 见
第8节.