※初めての投稿です!
先日某Webメディアに会員登録をしようと思った時思いました。「Macが提案してくれるパスワード長すぎね? Windowsで打つ時めんどくさくね?」と。
MacおよびiPhone, iPadが提案してくれるパスワードは20桁で、覚える必要がないにしろ、iCloudキーチェーンが使えないデバイスで入力するのはめちゃくちゃだるいです。(特にOculus Quest!!)
あとたまにパスワードの提案をしてくれない場合もあります。
てことでTouch Barから使える、ワンタップの、提案してくれるやつより短い、パスワード生成ツールを作ってみることにしました。
#何が必要か
前述のツールにはどんな機能が必要かをまず考えます。
- 複雑なパスワードを生成すること
- 毎回違うものが生成されること
- クリップボードにコピーされること
- Touch Barをタッチするだけで済むこと
この機能があれば要件は満たせますね。
#何で作ろうか。
##パスワードの生成
提案してくれるパスワードは20桁で、相当なセキュリティだと思います。それを短くするわけですから、もちろんそれなりに複雑なパスワードを生成しなければなりません。
そこでぱっと思いついたのはやはりPython(というかPythonしか知らない)。
調べてみるとパスワードを生成してくれるようなライブラリ、クリップボードに保存してくれるライブラリがあったので、Pythonに決定!
##ツールの起動
生成してくれてクリップボードに保存できても、いちいちターミナル開いてディレクトリに飛んで実行なんてしてられないので、Touch Barから実行できるようにします。
Touch Barのアプリみたいなのも作ってもいいかなと思いましたが、Swiftとかよくわからないので、Apple謹製自動化ソフトのAutomatorを使うことにしました。これならとても簡単です。
#いざツール作成開始
##パスワード生成〜クリップボード保存
使ったライブラリ
- string
- secrets
- pyperclip
コード
import string
import secrets
import pyperclip
#中身①
def password(size=12):
chars = string.ascii_uppercase + string.ascii_lowercase + string.digits
return ''.join(secrets.choice(chars) for x in range(size))
#中身②
result = password(10)
#中身③
pyperclip .copy(result)
###コードの説明
####ライブラリ/モジュール
- string: 小文字/大文字アルファベットや数字、記号をまとめた変数のライブラリ(例えばstring.digitsは0〜9の数字の変数)
- secrets: セキュリティ向けの強い乱数を生成してくれるモジュール
- pyperclip: クリップボードの書き込み読み出しとかしてくれる
####中身
- 大文字/小文字アルファベットと数字からランダムな文字列を生成してくれる関数を定義
- 一回それを保存
- クリップボードにコピー
##実行(Automator)
-
Launchpadに"Automator"と入れて、Automatorを起動
-
「シェルスクリプトを実行」をドラックアンドドロップでワークフロー(右側)に追加
-
以下のように書く(xxxはユーザー名)
cd /User/xxx/・・・/password.pyのあるフォルダ
/Users/xxx/opt/anaconda3/bin/python3 password.py
Pythonの場所は which python で出てきます。
これで実行側は完成なんですが、これでTouch Barから起動するとなぜか Operation not permitted というエラーが出ます。
SIP(システム整合性保護)が悪さをしているみたいで、それを解除すれば動きます!
(解除の仕方はGoogleでエラー名検索したら出てきます)
##Touch Barに追加
システム環境設定>キーボード>Touch Barに表示する項目 でControl Stripにチェックを入れたらすぐに使えます!
#実行の様子
もうちょいわかりやすい動画 https://t.co/8RdjkWFAp5 pic.twitter.com/6Q8qjMymGW
— Hiro (@hayahiro416) May 17, 2021
動画にもありますが、KasperskyのPassword Checkerで上の下くらいの評価なんでそれなりにいいんじゃないですかね。
#終わりに
なんといってもSIPの問題を解決するのにめちゃくちゃ時間がかかりました。Automatorの方でインライン化するとかすれば解決できたかもしれません。SIPの解除のリスクも高いですしね。何か解決案があれば教えてくださるとありがたいです。
##参考にした記事