str_rot47

Tester

sample

概要

string str_rot47(string $str)

引数 str に対して ROT47変換を施し、 その結果の文字列を返します。

ROT13変換がアルファベット26文字を対象にしているのに対し、ROT47変換は、アルファベットの大文字・小文字52文字+数字10文字+記号32文字の計94文字を対象とします。

ROT13変換と同様に、変換対象外の文字は元のままとなります。

補足

コメント

ROT13は単換字式暗号の一つで、「Rotate by 13 places」の略です。ROT47はその亜種です。シフト暗号とも呼ばれます。

また、古代ローマの軍事的指導者ユリウス・カエサル(ジュリアス・シーザー)が 初めて使ったとされていることから、カエサル暗号・シーザー暗号とも呼ばれます。 もっとも有名で、きわめて単純かつ原始的な暗号と言えます。

ちなみに映画「2001年宇宙の旅」に登場するコンピューター「HAL」の名は、 「IBM」を1文字ずつもどしてずらしてつけられたといわれています。

「日本語の文字列をすべて23ずつずらして別の文字に変換する」日本語版の ROT47変換なるものがあるという説明をするWeb辞書サイトが存在します。 しかし、実際にはそのような変換手法は存在しません。

そもそもROT47は「47文字ずらす」という意味ですので、それを 「23文字ずらす」と解釈している時点で根本的に間違っています。 さらに、47文字を対象とし23文字ずつずらす変換を2度行っても 元の文字列に戻るわけがありませんので、二重に間違っているといえます。

変換例

  • apple → 2AA=6
  • 2AA=6 → apple
  • APPLE → p!!{t
  • 0123456789 → _`abcdefgh

コード

function str_rot47($str) {
    return strtr($str,
        '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~',
        'PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO'
    );
}

関連

ちょこっとアンケート&メッセージ

このページに関するちょっとした感想または、要望、バグ・間違いの指摘、 質問・その他お問合せ等は、下記の送信欄からお送りください。 返信をご希望の方は「こちらのページ」からメッセージをお送りください。

「このページはお役に立ちましたか?」のアンケートとメッセージのどちらか一方でかまいません (両方書いていただけるとよりうれしいです)。お気軽にご利用ください (感想・フィードバック・どんな用途で使用したかなどをいただけると作成・運営の励みになります!)


このページはお役に立ちましたか?