偽装ファイルの作成(Python版)

日経ソフトウェア2009年12月号特別付録『かんたん10分プログラミングレシピ』から、インプラント・ファイルの作成のPython版をやってみる。記事の内容は、Webでも公開されているので誰でも読める。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060131/228220/
2つのファイルをくっつけて出力するだけなので、プログラムというほどのものではないのだが。Linuxでのインプラント・ファイルの挙動を確かめるためにやってみた。スクリプトはこんな感じ。

file1 = 'a.jpg'
file2 = 'zzz.txt.gz'
file3 = 'x.jpg'

separator = '\n --&& split here &&--\n'
input1 = open(file1, 'r')
input2 = open(file2, 'r')
output = open(file3, 'w')

output.write(input1.read() + separator + input2.read())

セパレータを間に挟んで、file1とfile2をこの順番で結合する。そのとき、新しくできるfile3の拡張子はfile1と同じものにする。

画像ファイル+テキストファイル→画像ファイル

容量は増えるが、内容はfile1と全く同じ画像ファイルとなる。コマンドcmpでfile1とfile3を比較すると、

$ cmp a.jpg x.jpg
cmp: ファイルa.jpgの末尾

と表示される。これは、ファイルa.jpgの後ろ部分のみがx.jpgとは異なることを意味している。このように2つのファイルがあれば比較できるが、x.jpgだけだとやはりただの画像ファイルとしか認識されない。

画像ファイル+画像ファイル→画像ファイル

a.jpgの後ろに別のb.jpgをくっつけても、できたファイルはa.jpgと全く同じ表示になる。

画像ファイル+bzip2ファイル→画像ファイル

a.jpgの後ろにz.txt.bz2をくっつけても、できたファイルはa.jpgと全く同じ表示となるただの画像ファイル。

bzip2ファイル+画像ファイル→bzip2ファイル

画像ファイルを後ろにくっつけても、解凍するとちゃんと元のファイルになっている。解凍するとき、後ろにごみがついてますよ、という旨のメッセージが表示されるが。

trailing garbage after EOF ignored

日経ソフトウエア 2009年 12月号 [雑誌]
日経ソフトウエア 2009年 12月号 [雑誌]日経ソフトウエア

日経BP出版センター 2009-10-24
売り上げランキング :


Amazonで詳しく見る
by G-Tools