환경 : Linux Ubuntu 22.04
The password for the next level is stored in the file data.txt, which contains base64 encoded data
문제에서 비밀번호는 base64 형식으로 encoding되어있다고 했기 때문에
파일을 읽어준 후 decoding하는 과정이 필요하다.
데이터를 Base64로 변환하는 것을 encoding, 그 반대를 decoding한다고 표현한다. 64진법을 사용하기 때문에 6bit로 하나의 문자를 표현한다.(2^6 = 64)
6bit를 4개씩 모아 변환하며, 비는 공간(padding)은 =로 채운다.
따라서 Base64로 encoding 했을 때 데이터의 크기는 33% 증가한다.
ASCII text→16진수→2진수→0으로 padding→10진수→Base64(Base64 table)
Base64에 대해 간단히 알아봤으니 비밀번호를 찾아보자.
data.txt 파일을 읽어보자.
확실히 비밀번호 길이보다는 많이 긴 것 같다. 마지막의 ==는 패딩인 것도 확인할 수 있다.
이 데이터는 Base64로 encoding된 상태이니 decoding만 해주면 비밀번호를 얻을 수 있다.
Base64로 decoding하는 코드는 다음과 같다.
echo VGhlIHBhc3N3b3JkIGlzIDZ6UGV6aUxkUjJSS05kTllGTmI2blZDS3pwaGxYSEJNCg== | Base64 --decode
실행 결과 비밀번호가 잘 나오는 것을 확인할 수 있다.
추가적으로 encoding할 때는 맨 뒤의 --decode를 생략해주기만 하면 된다.
password : 6zPeziLdR2RKNdNYFNb6nVCKzphlXHBM