画像データとしてプログラムを保存する

はてなフォトライフなど大量の画像データを無料で預かるサービスが多い。そこで画像データとしてプログラムをはじめバイナリデータやテキストデータを保存するプログラムを作ってみた。コンセプトしては昔からあるので別に新しいものでもないし、Windowsでは色々なフリーソフトがるようだ。ここでは、あくまで個人が気楽に使う意味で(お遊びで)、簡単なシェルスクリプトとして組んでみた。

まだ、完成度がかなり低く、ブログに載せるのはどうかな、と思ったのだが、ちょっと忙しくなりそうで、今書いておかないと忘れてしいそうなので。まだまだバグが潜んでいそうだが、それは御愛嬌で。

概要

tar(tape archive)をもじって“bar”(bitmap archive)という名前で作ったみた。例えば、

$ bar -cf files.png file1 file2 file3 ....

という風に使う。勿論、ディレクトリごと画像ファイルにアーカイブもできる。生成する画像データはPNGをデフォルトとして、指定でBMPも可能にした。純粋な画像データであれば不可逆圧縮であるJPEGなどでも構わないが、プログラムなどのデータを保存する場合は可逆圧縮である必要があるのでPNGにした。

アーカイブした画像ファイルから元のファイルを復元するには、

$ bar -xf files.png

とする。アーカイブ画像データは標準入力からも読み込めるので、

$ wget -O - http://img.f.hatena.ne.jp/images/fotolife/a/adsaria/20090305/20090305194844.png | bar -x

等と使うこともできる。

このbarというプログラム自身をビットマップにアーカイブすると となる。

公開暗号鍵による中身の確認

最近は何かと物騒である。ネットに保管しているデータをダウンロードしてきたら中身が書き換えられていてウィルスだった、なんてことも考えられなくもない。そこで、barには公開鍵による中身の確認機能を付けておいた。
ファイルをアーカイブする時に秘密鍵を指定して、シグネチャ付きアーカイブを生成する。

$ bar -cf files.png -s adsaria_private.pem file1 file2 file3

そして、シグネチャ付きアーカイブファイルを復元する時には公開鍵を指定してシグネチャを確認する。

$ bar -xf files.png -p adsaria_public.pem
bar: SIGNATURE was verified.

というメッセージが出てくる。
ただし、復元時に公開鍵を指定しなかったり、シグネチャが異なっていても、警告(WARNING)を出してファイルは復元する。あくまでも鍵によるシグネチャは暗号のためではなく、内容の確認のため。もし、暗号化して他人には公開したくないのであれば、アーカイブ前に暗号化しておく。

barを画像データとして保存した シグネチャ付きで生成してあるので“adsariaの公開暗号鍵”でシグネチャを確認することができる。

使い方

先ず、“Program List "bar"”にあるシェルスクリプトをコピー&ペーストして /usr/local/bin/bar というファイルとして保存する。それに対して実行権を与える。

$ sudo cat > /usr/local/bin/bar
	コピー&ペースト
[Ctrl-D]
$ sudo chmod +x /usr/local/bin/bar

次に、barは“convert”という画像フォーマットを変換するプログラムを使うため、convertがインストールされていない環境では、これをインストールしておく。Ubuntuの環境であれば次のようにしてインストールする。

$ sudo apt-get install imagemagick

Fedoraであれば

# yum install ImageMagick

あとは、実行するだけ。

オプション

-c 画像ファイルにアーカイブ。-xとは排他。
-x 画像ファイルからの解凍 -cとは排他。
-f ファイル名 画像ファイル名の指定。無いと標準入出力。
-b PNG または BMP 画像ファイルのフォーマット指定。-cの時のみ。
-s RSA秘密鍵 シグネチャ生成時の秘密鍵指定。-cの時のみ。
-p RSA公開鍵 シグネチャ確認用の公開鍵指定。-xの時のみ。