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으로 끝나지 않으면 =Base64 형식에는 패딩이 없으므로 직접 연결할 수 있다는 것입니다. 그렇지 않으면 문자열을 다시 인코딩해야 합니다.

관련 정보