我有两个 BASE64 编码的字符串,我想仅使用命令行获取两个字符串的二进制连接的 BASE64 编码。
例子:
> $ echo -n "\x01\x02" |base64
AQI=
> $ echo -n "\x03\x04" |base64
AwQ=
> $ echo -n "\x01\x02\x03\x04" |base64
AQIDBA==
所以我的问题的输入值是AQI=
和AwQ=
,所需的输出是AQIDBA==
答案1
解码输入并再次编码可能是最简单的:
$ echo "AQI=AwQ=" | base64 -d | base64
AQIDBA==
(或者,如果读取超过填充的字符串=
会冒犯您的敏感度,则只需为每个字符串单独运行解码器。)
$ (echo "AQI=" |base64 -d ; echo "AwQ=" |base64 -d) | base64
AQIDBA==
答案2
和bash
:
str1=$(echo -ne "\x01\x02" | base64)
str2=$(echo -ne "\x03\x04" | base64)
if [[ $str1 =~ =$ ]; then
concat=$( { base64 -d <<<"$str1"; base64 -d <<<"$str2"; } | base64 )
else
concat="${str1}${str2}"
fi
printf '%s\n' "$concat"
重点是,如果str1
不以 in 结尾=
,则 Base64 格式没有填充,因此可以直接连接。否则需要重新编码字符串。