近況+(プログラムネタ)Base16
2007年09月06日11:39
毎日うちに居てひたすら毎日12時間以上プログラムを組んでいるので、まったく日記のネタが無い...。
最近、Derbyという すごくコンパクトでポータビリティが高くなかなか堅牢なデータベースの研究を始めた。 これ、イイ! これがあれば何でも作れるぞ! データベースをいじってて初めて楽しいと思った...。 でもコレじゃネタにならん...。
他に書くことがないので、手作りプロトコル工房に書いた文章を転載します。 ややこしいので読まないでいいです。 ( でもマリオワールドのパスワードの秘密について書いてあります。)
──────────────────────────
... ご存知のとおり、 BASE64というのは、普通のバイナリ(0~255)の値集合を、 A~Z a~z 0-9 と +/ の64文字を使って、3バイトを4文字で表す方法の事だ。
これを使おうと思って色々考えていたけど、多くのシステムでは大文字と小文字を区別しないので、BASE64は使えない。 そこで考えたのだけど、64文字も使わないで 0~9A~Z ぐらいで バイナリをエンコードする方式が出来るんじゃないかな... と思って考えてみた。
0~9A~Zだと 36文字しかない。 これに一番近い2の累乗は32だ。 つまり5ビット。 この考え方なら、ちょっと面倒くさいけど、任意の32文字を選んで 5バイトを8文字で表す方式が作れそうだ。 つまり、Base32じゃないか! すごい事思いついた! ... だけど、調べてみたら Base32 という一般的な方式が既にあるんだそうだ ... がっかり。
しかも、Wikiに面白い事が書いてあった。 英語版のWikiによると、ゲーム内のパスワードでよく使われてるのだそうだ。 あの、あれだ。 マリオランドのパスワードだ。 面をクリアするとパスワードが表示される。 体力の量が変わるとパスワードも変わる。 だからきっとちょっと変えてやると体力を増やしたり出来るかも! と思ってズルしてデタラメなパスワードを入れてもなんかダメなやつ。
あれがBase32で出来ているんだそうだ。
これが面白いのだけど、文字の集合から母音を除く事でデタラメ入力に対して耐性を高めているんだそうだ。 絶妙なバランス!
http://en.wikipedia.org/wiki/Base_32
面白いなと思った。
僕はこのバレても大した損害が無いものに対しては、そこそこ頑丈な鍵を使うという「緩やかなセキュリティー」の考え方が好きだ。 よく、何でもかんでもガチガチに鍵をかけて、ひたすらシステムをガンコで使いづらい代物にするのが大好きな、技術オタクSEがよくいるけど、このマリオのつめの垢をせんじて飲ませてやりたい。 玄関の鍵はガッチリかけるけど、入り口の門の鍵は、開けよう思えばすぐ開けられてしまう鍵でかまわない。
これでも、あけようとしなければ入れない。 あけようとガチャガチャするうちに近所の人が気づくだろう。 その程度で充分事足りる。 毎日の事だから厳重にしすぎると後で大変になってしまう。
というわけで、せっかくがんばって発明した BASE32は 世界中で一般的なものだった。 しかし、僕はあきらめなかった。 この延長上で4ビット=1バイトを2文字で表すBase16というエンコード方式だって考えられるじゃないか! コレは使える! すごい発見だ!
... あなたはすごい発見だと思われるだろうか。 しかし、よく考えて欲しい。 人はこのエンコード方式を Base16と呼ばずに 「16進表示」と呼ぶことに。
つまり 0~9A~Fまでの16文字=4ビットを2文字で1バイトを表すわけで 0x12DFEAfA と書くのと同じわけだ。
実につまらない結論に到達。
最近、Derbyという すごくコンパクトでポータビリティが高くなかなか堅牢なデータベースの研究を始めた。 これ、イイ! これがあれば何でも作れるぞ! データベースをいじってて初めて楽しいと思った...。 でもコレじゃネタにならん...。
他に書くことがないので、手作りプロトコル工房に書いた文章を転載します。 ややこしいので読まないでいいです。 ( でもマリオワールドのパスワードの秘密について書いてあります。)
──────────────────────────
... ご存知のとおり、 BASE64というのは、普通のバイナリ(0~255)の値集合を、 A~Z a~z 0-9 と +/ の64文字を使って、3バイトを4文字で表す方法の事だ。
これを使おうと思って色々考えていたけど、多くのシステムでは大文字と小文字を区別しないので、BASE64は使えない。 そこで考えたのだけど、64文字も使わないで 0~9A~Z ぐらいで バイナリをエンコードする方式が出来るんじゃないかな... と思って考えてみた。
0~9A~Zだと 36文字しかない。 これに一番近い2の累乗は32だ。 つまり5ビット。 この考え方なら、ちょっと面倒くさいけど、任意の32文字を選んで 5バイトを8文字で表す方式が作れそうだ。 つまり、Base32じゃないか! すごい事思いついた! ... だけど、調べてみたら Base32 という一般的な方式が既にあるんだそうだ ... がっかり。
しかも、Wikiに面白い事が書いてあった。 英語版のWikiによると、ゲーム内のパスワードでよく使われてるのだそうだ。 あの、あれだ。 マリオランドのパスワードだ。 面をクリアするとパスワードが表示される。 体力の量が変わるとパスワードも変わる。 だからきっとちょっと変えてやると体力を増やしたり出来るかも! と思ってズルしてデタラメなパスワードを入れてもなんかダメなやつ。
あれがBase32で出来ているんだそうだ。
これが面白いのだけど、文字の集合から母音を除く事でデタラメ入力に対して耐性を高めているんだそうだ。 絶妙なバランス!
http://en.wikipedia.org/wiki/Base_32
面白いなと思った。
僕はこのバレても大した損害が無いものに対しては、そこそこ頑丈な鍵を使うという「緩やかなセキュリティー」の考え方が好きだ。 よく、何でもかんでもガチガチに鍵をかけて、ひたすらシステムをガンコで使いづらい代物にするのが大好きな、技術オタクSEがよくいるけど、このマリオのつめの垢をせんじて飲ませてやりたい。 玄関の鍵はガッチリかけるけど、入り口の門の鍵は、開けよう思えばすぐ開けられてしまう鍵でかまわない。
これでも、あけようとしなければ入れない。 あけようとガチャガチャするうちに近所の人が気づくだろう。 その程度で充分事足りる。 毎日の事だから厳重にしすぎると後で大変になってしまう。
というわけで、せっかくがんばって発明した BASE32は 世界中で一般的なものだった。 しかし、僕はあきらめなかった。 この延長上で4ビット=1バイトを2文字で表すBase16というエンコード方式だって考えられるじゃないか! コレは使える! すごい発見だ!
... あなたはすごい発見だと思われるだろうか。 しかし、よく考えて欲しい。 人はこのエンコード方式を Base16と呼ばずに 「16進表示」と呼ぶことに。
つまり 0~9A~Fまでの16文字=4ビットを2文字で1バイトを表すわけで 0x12DFEAfA と書くのと同じわけだ。
実につまらない結論に到達。
コメント一覧
退会したユーザー 2007年09月06日 18:02
そとでろ。たまには外出しなさいな。
でも今日のは勉強になりました。
でも今日のは勉強になりました。
おかあつ 2007年09月06日 19:07
たまにはみなとみらいでも行くかなぁ...
少し前は毎日のように散歩してたのにな。
少し前は毎日のように散歩してたのにな。
muri 2007年09月07日 13:02
ちゃんとオチが有ってえらいと思いました。
DBは全然知らないけど、sqliteいじってたら超便利だと思いました。こっちの人って何にも考えずにすぐmysqlとか入れちゃうけど何か違うと思う。
DBは全然知らないけど、sqliteいじってたら超便利だと思いました。こっちの人って何にも考えずにすぐmysqlとか入れちゃうけど何か違うと思う。
おかあつ 2007年09月07日 14:27
muriさん、DB 触ってなかったんだ... 意外...。
DB系じゃないとすると、どういう開発していたんだろう...
DB系じゃないとすると、どういう開発していたんだろう...
muri 2007年09月09日 12:43
自分は初期は制御系が多かったですね。中期はドライバ類(通信系)やカスタムクラスライブラリ書き。後期はOpenGLや携帯なんかも書いてましたです。なのでDBは疎遠でした。
おかあつ 2007年09月09日 12:59
muriさん、OpenGL書けるんだ...。
いい事聞いてしまった...。
いい事聞いてしまった...。