tr 및 rot13 문제

tr 및 rot13 문제

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-Z13개 이상의 문자가 포함되어 있기 때문입니다(예 Ö: , , ...). 따라서 정렬을 올바르게 구현하는 구현을 Ü사용할 때 rot13을 올바르게 지정하는 유일한 방법은 다음을 사용하는 것입니다.tr

tr ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

관련 정보