fastapple's blog

時系列関係なく、情報を追記・分割・統合などします。ブログに記載の内容のうち、引用ではなく、私自身が記載している文章・コードなどについては、自由にご利用ください。

7zのコマンドライン版で、AES256を使ってパスワード付きで暗号化する方法


※ここでのコマンドラインというのは、powershellのことだが、cmdでもunixでも大体同じだろう。

まず、単に7zと書くと、7z.exeが呼ばれるようにしておく。これはpowershellでは、以下のようにエイリアスを設定するコマンドを打ってやればいい。

Set-Alias 7z "C:\Program Files\7-zip\7z.exe"

コマンドラインで7zを使って暗号化する方法の記事はよくあるのだが、なんで自分が改めて書くかというと、自分のやりたいことがなかなかできなかったからである。正味2時間くらい悩んでいた気がするが、ようやくできた。まずは結論を書くと…、

7z a -pPassword -t7z -ssw -m0=LZMA2 -mhe=on aaa.7z aaa

こうだ。ちなみに、上の意味は、-pのあとの文字列はパスワード、-t7zはファイルタイプが7zということ、-sswはロックされているファイルでも含める、-m0=LZMA2は、圧縮形式がLZMA2ということ。-mhe=onはヘッダを暗号化するということである。
-m0=~~というのは読みにくいんだが、-m0,-m1という風に増やせるオプションもある。

ここから下は読まなくてもいいかもしれないが、何がハマるかというと、拡張子に7zを指定した場合に、例えば以下のようにはできない。

7z a -ssw -mem=AES256 aa.7z aa #wrong command.

この場合、パラメーターが間違っています。と言われる。拡張子から7z形式のファイルと考えたが、-mオプションはがzip形式向けの記載になっているからである。

ちなみに、以下のようにすればいけてしまう。

7z a -ssw -mem=AES256 aa.7z aa -tzip #right. but, misleading.

これは-tオプションで明示的にzip形式を利用するように指定しているので、拡張子から判断せず、zip形式のオプションとして、-mオプションを扱うからである。
ちなみに a は、addの略なので、形式の違う圧縮後のファイルがすでにある場合に、形式を変えて追記などはできないので、注意が必要である。

-mオプションについては、下記が詳しい。
-m (Set compression Method) switch

オプション全体などを網羅したものは下記で確認できる。
Command Line Version User's Guide