Base64形式で2つのバイナリ文字列を連結する

Base64形式で2つのバイナリ文字列を連結する

2つのBASE64エンコーディング文字列があり、コマンドラインのみを使用して2つの文字列のバイナリ接続の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で終わらなければ=Base64 形式にはパディングがないので直接接続できるということです。それ以外の場合は、文字列を再エンコードする必要があります。

関連情報