Linuxにはmkpasswdというコマンドがあって、パスワードが必要な時はコマンドを叩くとか、パイプで渡してやれば良いのだけど、MacOS Xだとpwgenとか入れないといけないらしい。しかも生成したパスワードをターミナルで選択してコピペするのは、ちょっとどうなんだろ?ということでAppleScriptで実装してみた。
Automaterで「サービス」を開いて「AppleScriptを実行」をドラッグ&ドロップし、中身を以下のAppleScriptコードにして[名前]を付けて保存すると、[サービス]メニューに[名前]が現れるので、任意のテキストフィールドでサービスを実行、あるいはキーボードショートカットをシステム環境設定で設定しておけば、キーボードショートカットでパスワードが入力される、と。
これでパスワードを設定する時にさぼらないで、強固なパスワードを使いやすくなるかなぁ。
入力したパスワードは****とかで置き換えられると分からなくなるので、クリップボードに保存される仕様。
あと、入力値のチェックとかしてないので、そこはよろしく。
on delItem of theList at n
if n ≤ 1 then
return (rest of theList)
else if n ≥ number of theList then
return (items 1 thru -2 of theList)
else
return (items 1 thru (n - 1) of theList) & (items (n + 1) thru -1 of theList)
end if
end delItem
on mkpasswd(theLength, numOfUpperAlphas, numOfLowerAlphas, numOfDigits, numOfSigns)
set upperAlphas to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set lowerAlphas to "abcdefghijklmnopqrstuvwxyz"
set digits to "1234567890"
set signs to "`~!@#$%^&*()_+-=[]>?;:'"
set numOfLowerAlphas to theLength - (numOfUpperAlphas + numOfDigits + numOfSigns)
set pw to {}
repeat numOfLowerAlphas times
set end of pw to some item of lowerAlphas
end repeat
repeat numOfUpperAlphas times
set end of pw to some item of upperAlphas
end repeat
repeat numOfDigits times
set end of pw to some item of digits
end repeat
repeat numOfSigns times
set end of pw to some item of signs
end repeat
set res to {}
repeat theLength times
set pos to random number from 1 to (length of pw)
set end of res to item pos of pw
set pw to delItem of pw at pos
end repeat
return (res as string)
end mkpasswd
delay 0.2
tell application "System Events"
set front_app to name of (path to frontmost application)
end tell
set userCanceled to false
set thePrompt to "Please input the length of password:"
try
set dialogResult to display dialog thePrompt buttons {"OK"} default answer "8"
on error number -128
set userCanceled to true
end try
if userCanceled = false then
set theLength to text returned of dialogResult as integer
set pw to my mkpasswd(theLength, 2, 2, 2, 1)
set the clipboard to pw
tell application front_app
activate
tell application "System Events" to keystroke "v" using command down
end tell
end if