
import sys
sys.stdin = open("input/1928_input.txt", "r")
encoding_table = list(
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
)
T = int(input())
for case in range(1, T + 1):
encoded = list(input())
binary_encoded = []
print(f"#{case} ", end="")
for i in encoded:
binary = format(encoding_table.index(i), "b")
for i in list(binary.zfill(6)):
binary_encoded.append(i)
binary_decoded = []
for i in range(0, len(binary_encoded), 8):
decoded = "".join(binary_encoded[i : i + 8])
decoded = "0b" + decoded
binary_decoded.append(decoded)
for binary in binary_decoded:
ascii_code = int(binary, 2)
print(chr(ascii_code), end="")
print()
우선 base64 인코딩 방식 부터 이해하자.
평문을 이진으로 변환 후 해당 이진 값을 6자리 단위로 잘라서 인코딩 테이블 값에 해당하는 문자로 인코딩한다.
즉, 다시 디코딩 하기 위해서는 인코딩된 문자열을 이진 변환하여 6자리 단위로 만든 후, 해당 이진 값들을 8자리 단위로 다시 자른다.
잘라진 값에 해당하는 유니코드 값이 디코딩된 문자이다.
이 문제에서 필요한 함수는 zfill 과, format 정도..
zfill 은 앞에 0을 채워 주기 위해 사용하고,
format 은 깔끔한 이진 코드를 얻어주기 위해 사용했다.