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の範囲を無効として扱うことに関連していると思います。なぜこれですか?
2番目の例では、コマンドが出力されるのはなぜですか?
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