PHPでOLE2のドキュメントを読むことと、MS-Office(2007以降)のパスワードを解除するためのPHPエクステンションを記述してみました。
JavaでのPOIのソースを参考にさせてもらいました。
ソースはこちらです。

まだ、エラー制御などはあまりできておりませんのでご了承ください。

ただし、パスワードを解除したファイルをMS-Officeを使って開くと、ファイルが壊れておりますとエラーがでます。
そこで出ているダイアログで「自動で修復する」と押せば、中身の参照はできます。
たぶん、ドキュメント内部に暗号化ドキュメントのフラグがあるので、そのあたりを無効にする必要があるのかもしれません。
これは参考にしたPOIでも同様でした。中身のXMLファイルはきちんと再現できているようなので、
前準備としてパスワードを解除して、XMLの中身を見るためのツールとしては使えると思います。
(たとえば、全文検索のインデックスの作成のためのドキュメントなんかには使えるのでは思います。)

あと、正確に言えば、まだこのエクステンションでは解除はできません。
解除するための、AES128のsecret keyをパスワードから算出するまでです。
(それ以降はmcryptを使って暗号を解読していますが、その方法はサンプルのPHPのソースの中をみてください。)

必要なライブラリ

OLEを読むためのネイティブライブラリにlibgsfを使っていますので、
libgsf
libgsf-devel
が必要になります。

#yum install libgsf libgsf-devel

のようにして、インストールしておいてください。

ビルド方法

ソース一式をダウンロードしてください。

#cd php-ole
#phpize
#./configure --enable-ole
#make; make install;

後は、ほかのモジュールと同じようにole.soファイルを有効にしてください。

サンプルの実行

サンプルのドキュメントがソースの中あります。
そのファイルを使う例です。
(php/test/password_abc.docxはサンプルドキュメントですので、ここを自分のものに変えてください。)

$cd php-ole
$php -f php/ole.php php/test/password_abc.docx

これを実行すると、実行したフォルダに同名のファイル名でパスワードを解除したファイルが作成されます。

以下のようなメッセージが表示されると思います。

------ Class OleInfile method list --------
array(6) {
  [0]=>
  string(11) "__construct"
  [1]=>
  string(4) "open"
  [2]=>
  string(11) "numChildren"
  [3]=>
  string(9) "statIndex"
  [4]=>
  string(15) "getStreamByName"
  [5]=>
  string(17) "getEncryptionInfo"
}
=== document entries === 
array(2) {
  ["name"]=>
  string(11) "DataSpaces"
  ["size"]=>
  int(0)
}
array(2) {
  ["name"]=>
  string(14) "EncryptionInfo"
  ["size"]=>
  int(224)
}
array(2) {
  ["name"]=>
  string(16) "EncryptedPackage"
  ["size"]=>
  int(10328)
}
------ Class OleEncryptionInfo method list --------
array(4) {
  [0]=>
  string(14) "verifyPassword"
  [1]=>
  string(12) "getSecretKey"
  [2]=>
  string(11) "getVerifier"
  [3]=>
  string(15) "getVerifierHash"
}
====== OK ==== 

最後にOKと出ていれば問題ありません。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2013年2月
« 1月   3月 »
 123
45678910
11121314151617
18192021222324
25262728  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ