読者です 読者をやめる 読者になる 読者になる

プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

プチコンを持っている人以外は解読できない暗号プログラム「プチグマ」

プチコン

またまた、ちょっとした思いつきを形にしてみました。
プチコンを持ってないと解くことが難しい暗号を考えてみました。

実際のところは単純なXOR暗号ですが、プチコンのフォントパターンを利用して、プチコンを持っていないと解読が難しいようにしてあります。
といっても、フォントパターンも公開されているし、単純な仕組みなので、本格的な暗号ではないです。

むしろ、子どもの頃にやった「暗号ごっこ」を楽しむためのもので、ごっこ遊びには十分なレベルになっています。
ただし、現代にふさわしくネットワーク対応機能として、BASE64化機能もつけてあります。
これでツィッターとかで暗号のやりとりができますね!!

スクリーンショット

【使い方】
1.暗号化する(Aボタン)か、解読する(Bボタン)かを選びます。

2.共通の鍵を1〜255 の範囲で入力してください。鍵は送る人と受ける人の間であらかじめ決めておいて、同じものを入力します。

3.暗号化しようとしているなら、もとのメッセージを、解読しようとしているなら、送られてきた暗号を入力してください。

4.暗号化しようとしているなら、暗号が、解読しようとしているなら、もとのメッセージが表示されます。


【プログラムのイメージ】
スパイが持ってる暗号装置のイメージです。
なのでBGMをスパイっぽいものにしてみました。(実はお気に入り)
また、暗号化・解読を行うと、チーーン!という音が鳴りますが、これは昔のキャッシュレジスターをイメージしたものです。
チン!みたいな短い音になっていますが、本当はもっと長い、チーーーン!って感じになるとよかったですができませんでした。
音を改良してくれる人がいたら、是非教えてください。


【プログラムコード】
例によって、GitHubのGistに登録してあります。

プチコン暗号 「PETITGMA」VER1.0
プチコン暗号 「PETITGMA」VER1.0 · GitHub

↓バグがとれない場合に使うテストコード(通常は入力不要です!)
プチコン暗号「PETITGMA」VER1.0用テストコード · GitHub

(2012/03/19追記)
mkII向けにQRコード公開します!





◆入力についてのアドバイ
(1)72行と87行は全く同一の内容の行ですので、72行目を入れたら、コピーして87行目に貼り付けるとよいでしょう。

(2)ASC関数がある行で、入力まちがいはないのに、Syntax Errorが出る場合、ASC関数の( )の中に関係した部分がおかしいです。
例えば、124行目でSyntax Errorになるが入力まちがいがない場合、MID$(ES$,I,1)に関係した部分が怪しいです。
123行目のFOR文で最後の -1 が抜けていると、ループの最後でASC関数の中が 長さ0の文字列 "" になり、Syntax Errorになります。

(3)エラーは出ないがどうも結果がおかしい、という場合、別のGist ( https://gist.github.com/1341296 ) にあるテストコードを追加入力して原因を調べるとよいです。
テストコードの中でも、最初は、 4行(テストコードへの飛び先ラベル)と 72 〜104 行を入力します。
テストコードを追加入力するほか、本体22行目の先頭の「’」を消してください。
実行後の選択肢で「%」を入力するとテストコードが実行されます。
PTGXOR→PTG64EN→PTG64DE→PTGXORの順に実行され、それぞれの結果が表示されるので、その結果を見てまちがいの箇所にアタリをつけましょう。
必要であれば、その前のテストコードを入力して動かすと、まちがい箇所を特定しやすくなります。



【仕様など】
◆暗号化処理の手順
(1)XOR演算処理(詳細は後述)を行います。
(2)BASE64エンコードを行います。

XOR演算処理の詳細
鍵を1〜255番のキャラクタコードとします。
当該キャラのフォントパターンを8bitごとに区切り、最初の8bitは1文字目とXOR演算、次の8bitは2文字目に...、として全ての文字にXOR演算を行います。
フォントパターンの最後の8bitまで行ったら、最初の8bitに戻ります。


◆解読処理の手順
(1)BASE64デコードを行います。
(2)XOR演算処理を行います。

XOR演算処理はエンコード時と同じ処理を使います。
XOR演算は、偶数回同じ演算を適用すると元に戻る、という性質がありますので、このXOR演算処理で暗号化と複合化の処理を兼用しています。


◆解読について
SEEDが1〜255までしかないので、プチコンを持っている人であれば、総当り法で簡単に解読することができます。
そういうガチな使い方じゃなくて、雰囲気を楽しむツールってことで一つよろしく。