【iPhone】ショートカットでシーザー暗号
更新情報
2020/11/21
文章を少し手直ししました。
2020/12/05
文書を少し手直ししました。
文字列を暗号化(シーザー暗号)できるショートカットを作ったので、ここに置いておきます。
ポエムとか日記とかをこれで暗号化しておけば、盗み見られて恥かくみたいなことが防げそうです。秘密日記ショートカットとか作ったら楽しそう。
注意点
遊びで使うのには向いてますが、本格的な用途で使うのには不向きなのでそこは注意願います。
1. シーザー暗号とは
文字を何文字かずらす暗号です。この暗号は歴史も深く、古代ローマの軍事指導者ジュリアス・シーザーが用いたと言われていることからそう呼ばれています。
例えば、 'A'を後ろに3文字ずらすと'D'になります。'X', 'Y', 'Z' を後ろに3文字ずらしたときは、表の最初に戻ってくると考えます。ですので順に 'A', 'B', 'C' となります。
文章だとわかりづらいので、以下のような対応表を作って考えるとわかりやすくなります。上はお馴染みのアルファベットABC...Z。その下はそれを3文字分後ろにずらしたものになっています。
対応表
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
例として、上の対応表を使って以下の暗号文の復号をやってみます。
暗号文(3文字後ろにずれている)
VKRUWFXW
先ず、1文字目の'V' を表の二段目から探します。そして、その上を見ると'S'になっているので復号後の文の1文字目は'S'になります。
以下、同様の手順で復号を進めていきます。
'K' → 'H'
'R' → 'O'
'U' → 'R'
'W' → 'T'
'F' → 'C'
'X' → 'U'
'W' → 'T'
よって、VKRUWFXW は、SHORTCUT //
今回はアルファベット26文字を考えていましたが、日本語の場合も考え方は同じです。お馴染みの50音表(あいうえお...) とか いろはの順(いろはにほ...) とかで考えます。
今回配布するショートカットでは、このシーザー暗号の仕組みを用いて文字列の暗号化・復号を行います。
2. ショートカットの取得
とりあえず、4つほどショートカットを作ったのでここに置いておきます。以下から全部ダウンロードしてください。
追加する際の注意点ですが、caesar(txt,shift) に関してはショートカットの名前を変えず、そのまま追加するようにしてください。
CCC
caesar(txt,shift)
dicMaker
shuffleCharOrder
3. 基本的な使い方
先ず、CCC というショートカットを実行してみてください。実行すると、以下のように文章の入力を要求されるので、暗号化(もしくは復号)したい文章を入力し、OKを押します。
試しに先程出てきた VKRUWFXW を入力して復号作業をやらせてみることにします。
CCC1
※ デフォルトではクリップボードの値を入力することになっています。そのため、実行したときになんらかの値が入っていることがありますが、それはクリップボードに今入っている値です。今回は使わないので削除するようにしてください。
すると、次に「何文字ずらしますか?」ということを聞かれます。ここでは復号をしたいので、-3 を入力します。マイナスをつけると、後ろではなく前に文字をずらすという意味になります。
CCC2
すると、以下のように表示されて、復号が無事行われたことがわかります。
CCC3
最後にクリップボードに結果をコピーするかどうか聞かれますので、好きな方を選択して終了します。「はい」を押すと結果がクリップボードにコピーされます。
4. caesar(txt,shift) の使い方
今回のメインは caesar(txt,shift)ショートカット です。このショートカットが暗号化・復号の処理を担っています。
先程実行した CCC は内部で caesar(txt,shift) を呼び出し、暗号化・復号の処理を任せています。CCC自体は入力の機能と、結果の表示機能・コピー機能しか持っていません。
さて、caesar(txt,shift) はショートカットですが、それ単体では使えません。他のショートカットから呼び出して使います。
使い方は以下の通りです。辞書アクションを使って値を渡して実行します。txtには処理をしたい文章を、 shiftにはずらす文字数を指定します。後ろではなく前に文字をずらしたいときにはshiftにマイナスの値を指定します。
caesar の使い方
これを実行すると以下のようになります。txt として渡した文字列を shift として渡した文字数分ずらした文字列が結果として帰ってきます。
実行結果
ここで復号を行いたければ、暗号化の時に渡したshiftの符号を反転させて実行してやります。例えばshiftを3で暗号化したならば、復号する時には-3を shiftとして渡してやるようにします。
5. 日本語でもシーザー暗号
配布した caesar(txt,shift) はデフォルトではアルファベット26文字(大文字・小文字)にしか対応していません。その他の文字をtxtに含めても、全て無視されてしまいます。
いや、日本語もシーザー暗号したいねんということで、対応させる方法をここで紹介します。
それには先程 caesar(txt,shift) と一緒にダウンロードしてきたショートカット、dicMaker を使用します。
このショートカットは、入力として与えられた文字の種類の辞書を作ってくれます。とりあえずひらがな50音に対応させる場合について考えてみます。以下の50音表(テキスト)をコピーした後、dicMaker を実行してください。
コピペ用50音
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
やゆよ
らりるれろ
わゐゑを
ん
がぎぐげご
ざじずぜぞ
だぢづでど
ばびぶべぼ
ぱぴぷぺぽ
実行したら、先程コピーした50音表をペーストし、OKを押します。
dicMaker1
すると、以下のように結果が表示され、辞書がクリップボードにコピーされます。
dicMaker2
そうしたら caesar(txt,shift) の編集画面を開き、先程コピーされた辞書を以下の箇所に書き込みます。デフォルトではアルファベットの辞書が書き込まれていますが、それを今回作った50音表の辞書にそれぞれ書き換えるということです。
dicMaker3
これで、caesar(txt,shift) をひらがなに対応させることができました。
試しに以下の暗号化されたひらがな文を復号してみます。CCC を実行し、ずらし文字に-3を入力すると復号可能なので、試してみてください。
くゆびぬか!すゐびのむぐずびよそーぜーえぐずかびえぐずかけそてろ、まさずかけそてろたわすぬげびこわるかのねってる!
6. デタラメな表を使う
ここまで、アルファベット表やら50音表やらを使って暗号化・復号を行ってきました。
しかし、これだとどんなに頑張っても(文字の種類-1)のパターンしかずらし方が存在しません。そのため、解読は非常に簡単に出来てしまいます。
例えば、アルファベットなら全部で26文字しかありませんから、25パターンのずらし方を順に試せばそれでよいことになります。
これを人力でやるのはちと手間ですが、ショートカットであれば25回ループを回して「繰り返しインデックス」の値をshiftとしてcaesar(txt,shift) を実行していけば画面に全パターンを簡単に表示することができるかと思います。(ショートカットでやると処理に時間はかかりますけどね)
まあ主な目的が遊びで使うことなわけですし、パッと見で何書いてあるかわからなければそれで面白いからこれでもいいんですけど、もうちょっと複雑にならないのか?というアレもあります()
それで、まあ色々考えたんですけど、結果的に使う表をシャッフルすりゃいいじゃんってなりました。お行儀よくABC...Zの順の表やら、あいうえお...の表を使う必要は別にないわけです。
そのために用意したのが shuffleCharOrder というショートカットです。これは入力として与えられた文字列の各文字の順番をランダムに入れ替えるということをやります。(その際、重複している文字は取り除かれます)
まあ試しに実行してみます。実行するとデフォルトでアルファベット26文字(大文字) が入っているかと思うので、そのままOKを押します。
shuffleCharOrder1
それでしばらく待つと、入力がシャッフルされた結果が表示され、その結果がクリップボードにコピーされてショートカットは終了します。例えば以下のような文字列がクリップボードにコピーされます。(実行するたびにランダムな値が出てきます)
RNOLWZAYPESJQGIUCXMTDBHKVF
あとはこの文字列で辞書をつくってそれをcaesar(txt,shift) に先程と同じ手順で書き込んでやればよいことになります。辞書を作るには dicMaker を使用します。( [5. 日本語でもシーザー暗号] の手順と同じです)
これで、使う表をシャッフルすることができました。試しにCCCで、アルファベット表(ABC...Z)を入力し、1文字後ろにずらしてみます。すると以下のようになります。
二段目が実行結果
ABCDEFGHIJKLMNOPQRSTUVWXYZ
YHXBSRIKUQVWTOLEGNJDCFZMPA
AがYになり、BがHになり...と複雑になりました。
これを使って暗号化・復号をやれば、けっこう複雑になるかと思います。復号するには暗号化のときに使用した辞書(文字の順番)と、ずらした文字数の情報が必要になります。
ショートカットでここまでやれれば十分なんじゃないでしょうか。どうですかね...
7. まとめ
まぱひぬを、むょーるひっるぼらひっりむーいーにぱあねぼぜっりごげむゆ。
れぱひはひむひっゆぢらぬっゆーるひ、まじぱるぢぱるひこむひっりへきみぬ
こを〜