Linux

以 base64 形式連接 2 個二進製字元串

  • June 8, 2017

我有兩個 BASE64 編碼的字元串,我想僅使用命令行來獲取兩個字元串的二進制連接的 BASE64 編碼。

例子:

> $ echo -n "\x01\x02" |base64                                                          
AQI=

> $ echo -n "\x03\x04" |base64                                                              
AwQ=

> $ echo -n "\x01\x02\x03\x04" |base64
AQIDBA==

所以我的問題的輸入值是AQI=and AwQ=,所需的輸出是AQIDBA==

可能最容易解碼輸入並再次編碼:

$ echo "AQI=AwQ=" | base64 -d | base64
AQIDBA==

(或者如果通過填充讀取字元串會=冒犯您的敏感性,則只需為每個字元串單獨執行解碼器。)

$ (echo "AQI=" |base64 -d ; echo "AwQ=" |base64 -d) | base64
AQIDBA==

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 表單沒有填充,因此可以按原樣連接。否則字元串需要重新編碼。

引用自:https://unix.stackexchange.com/questions/369961