Uryyb, Jbeyq! にROT13を適用すると Hello, World! になります。英単語らしい長さや句読点が残っているのに読めない文字列では、文字を一定数ずらした可能性を確かめる方法の一つです。見た目だけでROT13と判断せず、問題文のヒントと変換結果を照合しましょう。
シーザー暗号とROT13の違い
シーザー暗号ではアルファベットを円状に並べ、各文字を同じ数だけ移動させます。シフト3で前へずらす場合は A → D、B → E、Z → C です。末尾を超えると先頭へ戻ります。
ROT13はシフト量を13に固定したものです。例えば A ↔ N、B ↔ O、M ↔ Z が対応します。前へ13文字進んでも後ろへ13文字戻っても、26文字の輪の同じ位置に着きます。
| 方式 | シフト量 | 復号方法 |
|---|---|---|
| ROT13 | 13で固定 | 同じ変換をもう一度適用 |
| シーザー暗号 | このツールでは0〜25 | 暗号化した量だけ逆方向に移動 |
シフト0は何も変えない変換です。シフト3の暗号文をさらに3ずらしても元には戻りません。ROT13だけの性質を、すべてのシフト量へ当てはめないようにします。
ツールでROT13を戻す
- ROT13・シーザー暗号変換を開きます。
- シフト量を13、方向を「戻す」にします。
Uryyb, Jbeyq!を入力して「変換する」を押します。- 出力が
Hello, World!になることを確認します。
出力をもう一度入力して同じ設定で変換すると、Uryyb, Jbeyq! に戻ります。Pythonで照合する場合は、文字列変換用の codecs.encode('Hello, World!', 'rot_13') でも同じ結果を確認できます。
シフト3で方向と折り返しを確かめる
入力を XYZ abc 123、シフト量を3、方向を「ずらす」にすると ABC def 123 になります。X、Y、Z はアルファベットの先頭へ折り返し、小文字は小文字のまま変わります。
次に ABC def 123 を入力し、シフト3のまま方向を「戻す」にすると、元の XYZ abc 123 になります。一般のシーザー暗号で読めないときは、数字を変える前に方向を確認すると、同じ候補を繰り返し試すのを避けられます。
数字・記号・日本語はどうなる?
Tools Hubの対象は英字 A–Z と a–z です。空白、数字、句読点、日本語、絵文字は変更しません。例えば こんにちは ABC 123! をシフト3でずらすと こんにちは DEF 123! です。
これは文字コードの数値全体を加算する処理ではありません。数字もずれる方式や、英数字以外も対象にするROT47などは、このツールのシーザー暗号とは別です。
シフト量が分からないとき
英字26文字の方式だと分かっているなら、0〜25の26通りが候補です。このツールでは量を手動で変更して結果を確認できます。自動で言語判定したり、正解の候補へ順位を付けたりする機能はありません。
短い入力では複数の候補が単語らしく見えることもあります。意味だけで決めず、指定されたフラグ形式や問題文の条件に一致するか確認してください。シーザー暗号は候補が少なく、秘密情報の保護には適しません。
次に取り組む練習
ROT13・シーザー暗号ツールでシフト量を変え、変換結果を比較できます。バイトの表記との違いは、HexとUTF-8の解説も確認してください。