● さかなエンコーダ・デコーダ [鱒] 取扱説明書 ● 2007 年 04 月 03 日 (Ver 2.06) でんげき☆ネットワークサービス 猫山ぽるか http://www.dengeki.ne.jp/ [ 概要 ] お手持ちのファイルを「魚」に変換したり またその逆って云うか元のファイルに復元します かんなり冗長な変換を行うので変換後の魚サイズが 元ファイルの 4 倍くらいに膨れ上がります ※ Ver 2.xx で 20% ほど格納効率を上げまちた そんな容量を「増す」ツールだから「鱒」なのです。 なんちゃって。w 膨れ上がるのでフグでも良かったんだけどねぇ.. 奴は残念ながら漢字に魚が付かないってこともあり 今回は出演を断念したって業界の裏話もコッソリと(ぁ   : そんな訳で ISH や Base64 などには遠く及びませんが とりあえづファイルをテキストに変換するツールです 一般的な バイナリ ←→ テキスト 変換ツールと違うのは 変換したテキストが「魚」だらけで大漁大漁って感じなのと Web 上っていうか(主要な)ブラウザだけで処理できる点にあります それでも実用性が極めて乏しい事には間違いない雰囲気が濃厚なので その辺の洒落を判っていただける心優しい方のご利用をお願いします [ 設置 ] 設置する際にはエンコード用の mas.cgi とデコード用の sam.cgi を用意し それぞれを呼び出すフォームを用意する必要があります (index.html 参照) スクリプトの設定内容はほとんどありません..が mas.cgi に少しばかりの設定項目があります $maxsize = 0x40000 + 0x100; # 受け付けるファイルサイズ(概算) $url = 'http://www.dengeki.ne.jp/soft/mas/'; # ご案内内容 主に上記の 2 箇所のみを変更すれば良いでしょう 受け付けるファイルサイズは現状では約 256KB (=0x40000) までです もっと大きなファイルを受け付けたい場合はこの値を増やします 現状では 16 進数で表記してありますが 10 進数でも問題ないです 「ご案内内容」は復元できるフォームのある場所を記入しておきます あってもなくても問題はないですが利便性を高めるために できるだけ記述するようにしておいてください あとデコード用の sam.cgi は汎用ルーチンの jcode.pl を必要とします http://www.srekcah.org/jcode/ こちらのページからお好きなバージョンを 予めダウンロードして用意しておいてください (今回は jcode.pl-2.13 を使用) mas.cgi と sam.cgi と jcode.pl それと index.html を お手持ちのサーバにアップロードします 全てテキストモードでアップロードする必要があります アップロードしたらファイルのパーミッション(属性)を設定します mas.cgi パーミッション 755 (rwxr-xr-x) sam.cgi パーミッション 755 (rwxr-xr-x) jcode.pl パーミッション 644 (rw-r--r--) index.html パーミッション 644 (rw-r--r--) 一般的には上記の設定で大丈夫でしょう mas.cgi パーミッション 700 (rwx------) sam.cgi パーミッション 700 (rwx------) jcode.pl パーミッション 600 (rw-------) index.html パーミッション 600 (rw-------) ちなみに最近の suEXEC 環境の場合だとこんな感じかもです mas.cgi は CGI.pm モジュールを呼んでいます..が Perl 5 がインストールされた環境であればそのまま動きます ・・動く筈です(汗 この辺についてはあ んまり詳しく知らないので よく判らないひとはサーバ管理者さまに 「CGI.pm って使えるん?」とお尋ねください(定型分   : アップロードされたファイルを「魚」にエンコードする分にはまだマシですが その逆..「魚」をデコードするのはかなりイライラするほど遅いです またブラウザによっては「魚」をフォームに貼り付ける際に ものすごく処理に時間がかかる場合があります これはブラウザ側の問題なのでその辺もご留意ください [ 仕様 ] さかなエンコーダ・デコーダ [鱒] がどのような処理をして バイナリをテキストに変換するかの段取りなどを説明します まづ変換元となるサンプルファイルを用意しておきます (http://www.dengeki.ne.jp/soft/mas/fish.txt) ----- Start of fish.txt ----- マグロのお刺身を喰いたい カツオのタタキでも問題ないデス ----- End of fish.txt ----- 今回は便宜上テキストファイルを用意しましたが もちろんバイナリファイルでも問題ありません そしてコレをテキスト変換すると以下のようになります #! "fish.txt" [58] - 鱒 2.06 - (http://www.dengeki.ne.jp/soft/mas/) !# 鰭鮖鮒鱧鰆鯨鯒鰡鰻鮗鯰鮎鱈鰈鯵鯱鮭鮗鰈鯡鯖鯵鰈鰡鰯鱧鰯鰹鱶鰹鯵鯱鰯鯑 鱗鮖鮫鱧鰆鰹鮭鮖鮒鮎鮫鮎鯡鯱鯵鰤鰻鮖鮒鰍鰆鰹鯒鰍鰻鯛鰊鮎鯱鱚鯵鰊鱈鯣 鰐鮖鯛鰯鰆鰹鰆鰍鯰鰡鮫鮭鱧鮗鯵鯰鮭鮖鮫鮗鮭鯨鰈鯡鰻鯛鯵鯨鮖鯡鯔 #! "fish.txt" [58] - 鱒 2.06 - (http://www.dengeki.ne.jp/soft/mas/) !# それでは詳しく説明するとしましょう   : 先頭行と最終行にファイルを復元するためのヘッダを付加します この情報を基にファイルを復元するので確実に生成されねばなりません #! ヘッダ(フッタ)行の開始 1 つ以上の半角スペース " ダブルクオーテーション fname ファイルネーム " ダブルクオーテーション 1 つ以上の半角スペース [ 開きブラケット fsize 変換元のファイルサイズ ] 閉じブラケット 1 つ以上の半角スペース - ハイフン 1 つ以上の半角スペース 鱒 定数 1 つ以上の半角スペース 2.06 バージョンナンバー(復元ルーチン選択に使用する) 1 つ以上の半角スペース - ハイフン 1 つ以上の半角スペース ( 開き括弧 URL 復元できる場所って云うか URL を記入しておく ) 閉じ括弧 1 つ以上の半角スペース !# ヘッダ(フッタ)行の終了 この一連の塊をもってヘッダ行とします 途中に改行などが含まれるとエラーとなりますが 行頭・行末の余分な文字については問題としません #! "fish.txt" [58] - 鱒 2.06 - (http://www.dengeki.ne.jp/soft/mas/) !# 例えば上記のようなヘッダの場合だと この場合は正しく処理できないといけません 便宜上 2 箇所にヘッダ行を付けていますが 実際にはどちらか 1 行だけ存在すれば問題ないです 最初に見つけたヘッダ行の内容で処理を開始します   : 次は実際にテキスト化する際の手順です (Ver 2.xx 系列) #! "fish.txt" [58] - 鱒 2.06 - (http://www.dengeki.ne.jp/soft/mas/) !# 鰭鮖鮒鱧鰆鯨鯒鰡鰻鮗鯰鮎鱈鰈鯵鯱鮭鮗鰈鯡鯖鯵鰈鰡鰯鱧鰯鰹鱶鰹鯵鯱鰯鯑 鱗鮖鮫鱧鰆鰹鮭鮖鮒鮎鮫鮎鯡鯱鯵鰤鰻鮖鮒鰍鰆鰹鯒鰍鰻鯛鰊鮎鯱鱚鯵鰊鱈鯣 鰐鮖鯛鰯鰆鰹鰆鰍鯰鰡鮫鮭鱧鮗鯵鯰鮭鮖鮫鮗鮭鯨鰈鯡鰻鯛鯵鯨鮖鯡鯔 #! "fish.txt" [58] - 鱒 2.06 - (http://www.dengeki.ne.jp/soft/mas/) !# 「魚」だらけの行ですが標準状態で 34 文字(68byte) あります このうち行頭と行末は識別用の「魚」が充てられます 魚鮮鰭鱗鰐鮓鮑鮨 行頭識別用「魚」 鮴鯆鯑鯣鯔鰕鰉鰒 行末識別用「魚」 行頭識別用「魚」で始まり行末識別用「魚」で終わる行を 実際にデータを復元すべき行として扱うことにします 行頭識別用の 8 文字と行末識別用の 8 文字の 順番や組み合わせについては特に問いません またヘッダ行と同じく行頭・行末の余分な文字については 問題とせづ復元できるようにしなくてはいけません あと行頭・行末識別用の「魚」の無い行については エラーとすることなく読み飛ばすようにします #! "fish.txt" [58] - 鱒 2.06 - (http://www.dengeki.ne.jp/soft/mas/) !# 魚鮖鮒鱧鰆鯨鯒鰡鰻鮗鯰鮎鱈鰈鯵鯱鮭鮗鰈鯡鯖鯵鰈鰡鰯鱧鰯鰹鱶鰹鯵鯱鰯鮴 魚鮖鮫鱧鰆鰹鮭鮖鮒鮎鮫鮎鯡鯱鯵鰤鰻鮖鮒鰍鰆鰹鯒鰍鰻鯛鰊鮎鯱鱚鯵鰊鱈鯑 まっすぐ Go! 魚鮖鯛鰯鰆鰹鰆鰍鯰鰡鮫鮭鱧鮗鯵鯰鮭鮖鮫鮗鮭鯨鰈鯡鰻鯛鯵鯨鮖鯡鰕 #! "fish.txt" [58] - 鱒 2.06 - (http://www.dengeki.ne.jp/soft/mas/) !# 例えば上記のようになっていても正しく復元されねばなりません   : 行頭・行末識別を除いた 32 文字(64byte) が実データとなります 実データは 32 種類の「魚」を使用しテキスト化されます 32 種類を表すのに必要なビット数は 5bit です それに対し 1 バイトのビット数は 8bit でキリが悪いので 5 バイトをひとまとめにして 40bit として処理します 40bit の最上位ビットから 5bit づつ読み それに対応した数値にて以下の「魚」を割り当てます 00:鯵 01:鮎 02:鰯 03:鰻 04:鰍 05:鰹 06:鯨 07:鯉 08:鮭 09:鯖 0A:鮫 0B:鯛 0C:鱈 0D:鮒 0E:鮪 0F:鮃 10:鮖 11:鮗 12:鮠 13:鯒 14:鯡 15:鯱 16:鯰 17:鰌 18:鰆 19:鰈 1A:鰊 1B:鰤 1C:鰡 1D:鱚 1E:鱧 1F:鱶 それでは具体的な例を記してみます ----- Start of fish.txt ----- マグロのお刺身を喰いたい カツオのタタキでも問題ないデス ----- End of fish.txt ----- まづ上記が元の内容になります コレを 16 進 dump して 5byte づつに並べ 更にそのビット列を 5bit づつに区切ります 83 7D 83 4F 83 10000 01101 11110 11000 00110 10011 11100 00011 8D 82 CC 82 A8 10001 10110 00001 01100 11001 00000 10101 01000 8E 68 90 67 82 F0 8B F2 82 A2 82 BD 82 A2 0D 0A 83 4A 83 63 : 中略 83 49 82 CC 83 5E 83 5E 83 4C 82 C5 82 E0 96 E2 91 E8 82 C8 82 A2 83 66 83 10000 01010 10001 01000 00110 11001 10100 00011 58 0D 0A 01011 00000 00110 10000 1010 ← 不足分は '0' で埋める 先頭から順に処理していき.. 10000b = 10h = 鮖, 01101b = 0Dh = 鮒, 11110b = 1Eh = 鱧, 11000b = 18h = 鰆, 00110b = 06h = 鯨, 10011b = 13h = 鯒, : 中略 01011b = 0Bh = 鯛, 00000b = 00h = 鯵, 00110b = 06h = 鯨, 10000b = 10h = 鮖, 10100b = 14h = 鯡 ← 不足分は '0' で埋める 終盤で半端が出た場合には不足分のビットを '0' で埋め その後に処理をして完成となります 上記が Ver 2.xx 系列の処理手順です   : 参考までに Ver 1.xx 系列のエンコード法も記しておきます Ver 1.xx 系列では単純に 1byte = 8bit をひとまとめに扱います その 8bit の上位 4bit と下位 4bit に分割し.. 上位 4bit の値に対し以下の「魚」を割り当て 00:鯵 01:鮎 02:鰯 03:鰻 04:鰍 05:鰹 06:鯨 07:鯉 08:鮭 09:鯖 0A:鮫 0B:鯛 0C:鱈 0D:鮒 0E:鮪 0F:鮃 下位 4bit の値に対し以下の「魚」を割り当てます 00:鮖 01:鮗 02:鮠 03:鯒 04:鯡 05:鯱 06:鯰 07:鰌 08:鰆 09:鰈 0A:鰊 0B:鰤 0C:鰡 0D:鱚 0E:鱧 0F:鱶 そうしてエンコードしたものが以下のようになります #! "fish.txt" [58] - 鱒 1.04 - (http://www.dengeki.ne.jp/soft/mas/) !# 鰭鮭鯒鯉鱚鮭鯒鰍鱶鮭鯒鮭鱚鮭鮠鱈鰡鮭鮠鮫鰆鮭鱧鯨鰆鯖鮖鯨鰌鮭鮠鮃鮖鯑 鱗鮭鰤鮃鮠鮭鮠鮫鮠鮭鮠鯛鱚鮭鮠鮫鮠鯵鱚鯵鰊鮭鯒鰍鰊鮭鯒鯨鯒鮭鯒鰍鰈鯣 鰐鮭鮠鱈鰡鮭鯒鰹鱧鮭鯒鰹鱧鮭鯒鰍鰡鮭鮠鱈鯱鮭鮠鮪鮖鯖鯰鮪鮠鯖鮗鮪鰆鯔 鮓鮭鮠鱈鰆鮭鮠鮫鮠鮭鯒鯨鯰鮭鯒鰹鰆鯵鱚鯵鰊鰕 #! "fish.txt" [58] - 鱒 1.04 - (http://www.dengeki.ne.jp/soft/mas/) !# 同じ上位と下位が同じビット列であったとしても それぞれに別の「魚」を割り当てるので無駄が多いですが 処理が簡単なので練習用にはいいかもです   : Ver 1.xx 系列も Ver 2.xx 系列もエラーについては考慮してません。 これは現状の通信環境であれば文字化けなどありえないと云うことと 行頭・行末のタグなど余計なものを省かれた部分については 編集を加えられることなどありえないとの考えに基づいています そのような理由でこれ以上データ量が増えないようにと考慮して 敢えてエラーチェック・訂正の処理を省くことにしました 実際に使用する際にはその辺にも留意するようにしてください 書き忘れてましたが(汗 コメント行と云うか一定行数ごとに 何行目かの以下のような目安を挿入するようにしていますが #! 3800: "fish.jpg" !# これについては現状では無視して処理してるので あってもなくても構わないです [ 免責 ] mas.cgi sam.cgi index.html mas.txt などなどを使用した いかなる結果についても私「猫山ぽるか」は一切の責任を負いません ご利用は各人の自己責任でお願いします 配布は "無料であれば" 自由に行って頂いて構いません もし商用利用したいのであればその旨をご連絡ください (商用頒布, 商用設置・利用などなど) 頒布する際に改造することを認めますが データフォーマットの互換性がなくなる改造はご遠慮ください ・・そんな感じでご利用いただけたら幸いに思います でわまたw