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 形式にはパディングがないので直接接続できるということです。それ以外の場合は、文字列を再エンコードする必要があります。