OverTheWire의 Bandit을 플레이하고 있습니다. 11단계에서는 이 일반 텍스트 번역 데이터 파일을 사용하도록 요청합니다 "Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh"
. 해결책은 이 명령을 사용하는 것임을 알고 있습니다.
`tr 'A-Za-z' 'N-ZA-Mn-za-m' <<< "Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh"`
그러나 다음 옵션이 작동하지 않는 이유를 이해할 수 없습니다.
`tr 'A-Za-z' 'Z-Az-a'`
또는
`tr ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba <<<"Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh"`
첫 번째 예는 tr이 za 및 ZA의 범위를 유효하지 않은 것으로 처리하는 것과 관련이 있다고 생각합니다. 왜 이런거야?
두 번째 예에서는 명령이 출력되는 이유는 무엇입니까?
Tfi xmuuqyvj eu 5Ti8O4jvgKVhKp8sgjqsIP8CHK6c2ISs
정답 대신:
The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
답변1
ROT13은 알파벳 13자리를 이동합니다. 예를 들어 A와 N 위치를 바꾸고, B와 O도 위치를 바꾸는 등입니다. 그것은 정확히 당신의 시도가 하는 일인 알파벳을 뒤집지 않습니다.
구문으로 인해 tr
이 작업이 약간 혼동될 수 있습니다. 귀하가 게시한 ROT13 인코더/디코더는 다음과 같이 작성하여 무슨 일이 일어나고 있는지 더 명확하게 할 수 있습니다.
tr 'A-MN-Za-mn-z' \
'N-ZA-Mn-za-m' \
<<< ciphertext
여기에서 해당 문자 범위가 서로 어떻게 관련되어 있는지 더 잘 확인할 수 있습니다.
답변2
tr 'A-MN-Za-mn-z' 'N-ZA-Mn-za-m'
50년 전에는 작동했을 수도 있지만 1992년 UNIX에 국제화가 도입된 이후 더 이상 작동하지 않습니다.
확인하다:
$ echo Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XS | /usr/xpg4/bin/tr 'A-MN-Za-mn-z' 'N-ZA-Mn-za-m'
출력(실제 로캘에 따라 다름) 예:
vFè pÂÛÛAøßé ÌÛ 5vè8À4éßËEtêEá8VËéAVÈÁ8jÊ
왜 이런 일이 발생합니까?
그 이유는 범위에 N-Z
13개 이상의 문자가 포함되어 있기 때문입니다(예 Ö
: , , ...). 따라서 정렬을 올바르게 구현하는 구현을 Ü
사용할 때 rot13을 올바르게 지정하는 유일한 방법은 다음을 사용하는 것입니다.tr
tr ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm