#目的
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を付与したものとしている。(ここはもっとこだわれる箇所でもあるけれど、手で直しても良いレベルなので今はそうしてます)