📅  最后修改于: 2023-12-03 14:55:05.577000             🧑  作者: Mango
如果你曾经遇到过 无效的 base64 编码字符串:数据字符数 (221) 不能是 1 大于 4 的倍数
的错误提示,那么恭喜你,至少代表你在使用 base64 编码相关的程序或工具。
base64 编码是一种用于将二进制数据转换成 ASCII 字符串的编码方式。它是一种可逆的编码方式,可以将任意二进制数据编码成 ASCII 字符串,便于在邮件、URL、JSON 等场景下传输。base64 编码的字符串长度一般为原始数据长度的大约 4/3 倍。
在使用 base64 编码字符串的时候,需要注意的是,对于一个长度为 n 的字符串,进行 base64 编码后,其结果字符串长度一般为 ceil(n/3) x 4,即如果结果字符串长度不是 4 的倍数,那么必须进行填充。所谓填充,就是在结果字符串末尾添加 1 个或 2 个等号字符(=),使得结果字符串长度变为 4 的倍数。
而对于 无效的 base64 编码字符串:数据字符数 (221) 不能是 1 大于 4 的倍数
这个错误,实际上是在解码一个 base64 编码字符串时出现的。当一个 base64 编码字符串的长度既不是 4 的倍数,且最后一个字符不是等号(=)时,我们就会得到这个错误。
解决该错误的方法很简单,只需要在解码前,根据上文所述的规则,对 base64 编码字符串进行填充即可。如果结果字符串长度已经是 4 的倍数,则不需要填充。如果结果字符串长度是 4 的倍数,但最后一个字符是等号,那么也需要进行填充。
下面是一个具体的 Bash 代码示例,可以对 base64 编码字符串进行填充,然后进行解码:
#!/bin/bash
# 要解码的 base64 编码字符串
base64_str="SGVsbG8gV29ybGQh"
# 计算填充后的字符串长度
len=${#base64_str}
mod=$(($len%4))
if [ $mod -eq 2 ]; then
base64_str="$base64_str=="
elif [ $mod -eq 3 ]; then
base64_str="$base64_str="
fi
# 解码 base64 编码字符串
decoded_str=$(echo "$base64_str" | base64 -d)
# 输出解码后的字符串
echo $decoded_str
在这段代码中,我们首先计算了 base64 编码字符串的长度,并根据长度和填充规则进行填充。然后使用 base64 -d
命令解码填充后的字符串,并输出解码后的字符串。
通过上述代码示例,我们可以避免出现 无效的 base64 编码字符串:数据字符数 (221) 不能是 1 大于 4 的倍数
的错误,以及其他相关问题。