ROT13 とは
ROT13 は「rotate by 13 places(13文字ずらす)」の略です。各アルファベットを、アルファベット順で13文字先の文字に置き換えます。A は N に、B は O になり、N は先頭に戻って A になります。大文字は大文字のまま残り、アルファベット以外の文字はそのままです。
アルファベットは26文字なので、13文字ずらす処理を2回行うと元に戻ります。つまり ROT13 は、同じ操作でエンコードもデコードもできます。「どちら向きに変換するか」を気にする必要がありません。
ROT13 は1980年代に Usenet のニュースグループで、ネタバレ、ジョークのオチ、クイズの答えを隠すための礼儀として広まりました。読みたい人は1回の操作で元に戻せます。今でも掲示板、ジオキャッシングのヒント、プログラミングの練習問題などで使われています。
ツールの使い方
- 左側の「テキスト」欄に入力するか貼り付けます。右側の「ROT13 テキスト」欄に ROT13 で変換した結果が表示されます。
- 変換済みのメッセージを読むには、「ROT13 テキスト」欄に貼り付けます。左側に元のテキストが表示されます。
- 別のずらし方が必要な場合は、「方式」から選びます。
- ROT13:アルファベットのみ
- ROT18:アルファベットと数字
- ROT47:表示可能な ASCII 文字すべて
- どちらかの欄の上にある「コピー」でテキストをコピーし、「クリア」で両方の欄を空にします。
変換例
以下は、このページで各方式を実際に実行した結果です。
| テキスト | ROT13 | ROT18 | ROT47 |
|---|---|---|---|
| Hello, World! | Uryyb, Jbeyq! | Uryyb, Jbeyq! | w6==@[ (@C=5P |
| Room 42 | Ebbz 42 | Ebbz 97 | #@@> ca |
| Code 2026 | Pbqr 2026 | Pbqr 7571 | r@56 a_ae |
| Gate 7 opens | Tngr 7 bcraf | Tngr 2 bcraf | v2E6 f @A6?D |
| To get to the other side! | Gb trg gb gur bgure fvqr! | Gb trg gb gur bgure fvqr! | %@ 86E E@ E96 @E96C D:56P |
ROT13 の対応表全体は次のとおりです。上が元の文字、下が ROT13 での対応する文字です。
abcdefghijklmnopqrstuvwxyz
nopqrstuvwxyzabcdefghijklm
前半の13文字が後半に、後半の13文字が前半に対応します。a は n に、n は a に、z は m になります。
3つの方式
ROT13 は、A から Z と a から z だけを13文字ずらします。数字、スペース、句読点、アクセント付きの文字は変わりません。昔からある方式で、単に ROT13 と言えばこれを指します。
ROT18 は、アルファベットに ROT13 を、数字に ROT5 をかけたものです。数字はそれぞれ5つずれるので、0 は 5 に、1 は 6 に、9 は 4 になります。これも同じ操作で元に戻ります。
ROT47 は、! から ~ までの表示可能な94種類の ASCII 文字を対象にします。アルファベット、数字、一般的な記号がすべて含まれます。各文字は47個ずれます。47 は 94 の半分なので、ROT47 も同じ操作で元に戻ります。出力はテキストらしさがかなり薄れるのが利点ですが、チャットアプリが書式として扱うバッククォートや縦線などの文字が含まれることがあります。
スペースや、絵文字・アクセント付きの文字のようにこれらの範囲の外にある文字は、どの方式でもそのまま残ります。
制限
ROT13 は、ずらす数が13のシーザー暗号の特別な形です。安全性はまったくありません。鍵がなく、短い ROT13 の単語なら見ただけで読める人も大勢います。ネタバレをちらっと見られないようにする程度の用途に使い、パスワードや個人的なメッセージを守るためには使わないでください。
また、英語以外の文字には何の効果もありません。ギリシャ文字、キリル文字、アラビア文字は変わらずに通過します。ひらがな、カタカナ、漢字も同じで、たとえば Hello こんにちは は Uryyb こんにちは になります。全角のアルファベット(ABC など)も変換されないので、ROT13 をかけたい英字は半角で入力してください。
そのほかの ROT13 変換方法
Linux、macOS、Git Bash では、tr コマンドを使えば1行で ROT13 をかけられます。
echo 'Hello, World!' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
これで Uryyb, Jbeyq! と表示されます。出力に同じコマンドをもう一度かけると、元に戻ります。
Python では、標準ライブラリに ROT13 が組み込まれています。
import codecs
codecs.encode('Hello, World!', 'rot13')
こちらも Uryyb, Jbeyq! を返します。
Vim では、テキストを選択して g? を押すと ROT13 がかかります。メニューに ROT13 のコマンドがあるメールソフトやテキストエディタもあります。
表計算ソフトでは、1文字ずつ CODE、MOD、CHAR で処理する必要があり、準備に手間がかかります。ここにテキストを貼り付ける方が簡単です。
関連ツール
13以外のずらし方には、未知のずらし幅の解読もできるシーザー暗号ツールを使ってください。アルファベットを数字に変えるなら A1Z26 暗号が使えます。隠すためではなく、メールやURLで壊れないようにテキストを変換したい場合は Base64 を使ってください。