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