ClosedXML, ExcelDataReader, EPPlus, NPOIがパスワード解除について

通常のxlsxのファイルは拡張子をzipにし、展開するとファイルの中身が確認できます

それに対し、読み取りパスワードを設定すると、ファイル全体が暗号化されるため、同様のことはできません。

暗号化されているためzip構造になっていないということですね。

GPTの予想では、ファイル全体の暗号化/複合化の対応まで対処するのが大変なので、これらのライブラリでは読み取りパスワードの解除機能はないのではないかとのこと。

書き込みパスワードの場合はどうかというと、書き込みパスワードであれば閲覧できないわけではないので、
zip化して開いて中身をみることができます

xl/workbook.xml を開くと以下のように埋め込まれていて

<fileSharing userName="ユーザー名" algorithmName="SHA-512" hashValue="/Sjoy10H3uY10Lh1Ew7UkIlk8b6ZAVNvvpd6LUsgoFJFYrkn7QJ2e2nAgguO1gdRRWwK9NrGpaduJG5y6nZsLA==" saltValue="3GWq9TRXLA7h35x78qzkHQ==" spinCount="100000"/>

ざっくりとした解釈では、入力された書き込みパスワードにsaltをつけてハッシュ化し、
もとまった値に対してもsaltをつけてハッシュ化することを100000をくりかえした結果をhasValueに設定している

詳細の仕様については、 以下に仕様ありとのこと
MS-OFFCRYPTO
https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-offcrypto/3c34d72a-1a61-4b52-a893-196f9157f083

生成AIにいろいろ確認した内容のまとめ

ライブラリ 読み取りパスワード解除 書き込みパスワード解除 書き込みパスワード設定 シートの保護設定 シート保護解除して書き込み
ClosedXML ×非対応 ×非対応 ×非対応 〇対応 〇対応
EPPlus ×非対応 ×非対応 〇対応 〇対応 〇対応
ExcelDataReader ×非対応 ×非対応 ×非対応 ×非対応 ×非対応
NPOI ×非対応 ×非対応 ×非対応 〇対応 〇対応

EPPlusにおいては、書き込みパスワードの設定が可能であり、
シートの保護関係については、ExcelDataReader以外は対応している様子です

極論をいえば、XMLファイルを操作するだけなので、ファイル全体が暗号化されていなければ、ただの文字列が書き込まれているだけなので
ライブラリ側で無視してしまえば、書き込みパスワードもシートの保護もなかったことになってしまうという話ですが・・・

実際は、シートの保護は対応しても、書き込みパスワードについては対応していないのが現状のようです。。

生成AIの予想では倫理的なものではという話ですが、ちょっと謎です

投稿日時: 2025-05-10 18:17:10
更新日時: 2025-05-11 05:53:11

内部リンク

Comment

最近の投稿

最近のコメント

タグ

アーカイブ

その他