目的
Windows環境な人にMacからファイルを送る為に、AES256で暗号化してパスワードつけたZipファイルを作りたい。しかも手軽に。
Step概要
- 7zを入れる
- Finderにフルディスクアクセスをつける
- Automatorで暗号化サービスを作成する
では早速
1. 7zを入れる
以下でインストールします。簡単ですね。
brew install p7zip
(brewが入っていない人は適宜入れておいてください)
2. Finderにフルディスクアクセスをつける
Operation not permitted エラーで動かない原因がこれだと気付くまで何気にハマった箇所でした。Catalinaは中々厳しいです。
ではまず最初に、システム環境設定 を開きます。

セキュリティとプライバシー を開きます。

ここで変更するにはカギをクリックしますの横のカギマークをクリックして編集可能にします。

が

のようになればOK。
フルディスクアクセス を選択し右側のペインにFinderが入っていない場合は+ マークを押します。
アプリケーション選択ダイアログが出てくるので、Command + ↑などで最上位階層まで上がり、
Macintosh HD → システム → ライブラリ → CoreServicesと辿るとFinder.appが見えるはずですので、それを選択してOKしてください。
以下のようになればOK。

これをやらないと、後で7zコマンドを叩いた時に権限不足でエラーになるのです。(7z入れてみたりAutomatorを追加してみたりしましたがダメでした。)
不安な方は一度この後の実装をやってエラーが出ることを確認してから、このフルディスクアクセスへの権限追加を実施してもらってもOKです。Finderの再起動を求められますので、実施してもらってOKです。(その際、開いているFinderが一度全部閉じてしまいますので、作業途中のものがある場合は注意してください。)
また、不要になったらFinderのチェックを外すか、-ボタンでエントリーを消してしまえば元に戻ります。
3. Automatorで暗号化サービスを作成する
LaunchpadからAutomatorを起動します。

こんなアイコンです。
起動したらクイックアクションを選択して選択ボタンを押します。

次に実行時のオプションは以下のようにします。

イメージやカラーは好きにいじってください。(どこに反映されるのかよくわかってませんが問題ないです。)
その後、以下の図の名前という検索窓があるのでそこにカーソルを合わせ、

「シェルスクリプト」と打つとシェルスクリプトを実行というアクションが出てきます。これを右側の開いた箇所にドラッグすると

以下のようになりますので入力の引き渡し方法を引数としてを選択しておきます。

エディタ部分に以下のソースをコピペしてください。
password=$(osascript -e ' text returned of (display dialog "Enter password:" with title "AES256 ZIP" default answer "" buttons {"OK"} default button 1) ')
if [ "$password" != "" ];then
password="-p"${password}
fi
/usr/local/bin/7z a -ssw -mem=AES256 -tzip ${password} -scsWIN -xr\!.DS_Store "$1".zip "$@"
あとは適当な名前で保存(command + s)したら完成です。
ちなみに、この際の名前が後でサービスメニューに表示されるので、わかりやすい名前にしておくと良いと思います。私はAES256ZIP4WINというものにしました。
使い方
フォルダごと圧縮する場合
Finderから圧縮したいフォルダ選択し、歯車マークもしくは副ボタンのクリック(私の場合は指二本クリック)すると、最下部にサービスというのが見えるので今回作成したサービスAES256ZIP4WINをクリックします。

するとパスワード入力ダイアログが表示されますので、パスワードを設定する場合は入力してください。設定しない場合は空欄でOKしてください。

すると、選択したフォルダと同じ場所にフォルダ名.zipというファイルが作成されます。

1つまたは複数のファイルを圧縮する場合
基本的には同じで、Finderから圧縮したいファイルを選択し、歯車マークもしくは副ボタンのクリックすると、今度は直接先ほどのサービスが選択できます。あとは同じです。

以上
これでお手軽にパスワード付き暗号化Zipが作成できるようになりました。👏
これまでわざわざWindowsのVM立ち上げて7Zipでやっていたのがだいぶ楽になりました。🙌
皆様のお役に立てれば幸いです。
appendix: ソース解説
パスワードの入力
password=$(osascript -e ' text returned of (display dialog "Enter password:" with title "AES256 ZIP" default answer "" buttons {"OK"} default button 1) ')
パスワードのハードコードとかさすがに出来ませんので、Applescriptのダイアログを使って結果を変数に代入しています。
パスワードに-pをつけてオプションとして動くようにする
if [ "$password" != "" ];then
password="-p"${password}
fi
入力されたパスワードがある場合(空白じゃない場合)に、頭に-pを付与することで7zで有効なオプションにしています。
7zコマンド
/usr/local/bin/7z a -ssw -mem=AES256 -tzip ${password} -scsWIN -xr\!.DS_Store "$1".zip "$@"
- 7zの後の
aは圧縮(add)の意味。 -
-sswで、他のアプリケーションが対象ファイルを開いてても圧縮する。 -
-mem=AES256は圧縮メソッドの暗号強度指定。 -
-tzipはZIP形式の指定。AES256の指定はZIP用のオプションらしい。(というか7z形式だとそもそもそも基本がAES256とのこと) -
${password}は、ダイアログでのパスワードがある場合(例えばhogehoge)は-phogehogeとなる。 -
-scsWINで、ファイル名をWIN形式(SJIS)にする。(らしい) -
-xr\!.DS_Storeで、Macによくある隠しファイル.DS_Storeを除外する。 - 圧縮ファイル名は最初のファイルもしくはフォルダ名に.zipを付与したものとしている。(ここはもっとこだわれる箇所でもあるけれど、手で直しても良いレベルなので今はそうしてます)

