以base64形式连接2个二进制字符串

以base64形式连接2个二进制字符串

我有两个 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 格式没有填充,因此可以直接连接。否则需要重新编码字符串。

相关内容