The password for the next level is stored in the file data.txt, where all lowercase (a-z) and uppercase (A-Z) letters have been rotated by 13 positions
비밀번호는 data.txt 파일에 저장되어 있으며, 모든 대문자 및 소문자가 13자리 씩 로테이트(?) 되어 있다고 하네요.
해당 파일을 일단 읽어 보겠습니다.
bandit11@bandit:~$ cat data.txt
Gur cnffjbeq vf 7k16JArUVv5LxVuJfsSVdbbtaHGlw9D4
느낌상 알파벳이 13자리 만큼 뒤로 가 있으니 다시 원래대로 돌려줘야 할 것 같네요.
위 문제는 'ROT13'에 관련된 문제입니다.
✅ ROT13
단순한 문자 치환 암호화 기법으로 알파벳을 13글자 뒤로 이동시킵니다.
A -> N, B -> O, C -> P 처럼 말이지요!
알파벳은 26개이므로 다시 ROT13을 적용하면 원래 문자로 되돌릴 수 있습니다.
문자를 변환하기 위해서는 tr 명령어를 사용하면 됩니다.
기본적인 사용법은 tr [옵션] '대상 문자' '변환할 문자' 입니다.
아래의 예제는 대문자로 작성된 문자열을 소문자로 치환하는 명령어입니다.
moonsookang@MoonSooui-noteubug Downloads % echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
이를 활용하여 문제에서 사용된 ROT13을 변환시켜 보겠습니다.
bandit11@bandit:~$ cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
The password is 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4
비밀번호는 출력했지만, 작동하는 원리에 대하여 살짝 헷갈리더군요!
풀어서 설명해 보겠습니다.
✅ cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
1. data.txt를 출력함
2. |(파이프)를 활용하여 출력물을 tr 명령어의 입력으로 넘김
3. 'A-Za-z'는 대문자 알파벳 전부와 소문자 알파벳 전부를 의미
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
4. 'N-ZA-Mn-za-m' -> 알파벳의 순서를 바꾼 것
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
n o p q r s t u v w x y z a b c d e f g h i j k l m
5. 각자의 위치에 해당하는 알파벳를 변환하면 비밀번호 출력 완성 :)