|
次のアップデートバージョンでは、SSL やBlowfish などの暗号化が予告されていますが、その基本要素のひとつであるパスワードの入力についてです。
Revolution には上に書いてあるように、 ask password というコマンドが用意されていますから、それを使うのが一番簡単とも言えますが、 ask password で出てくるダイアログには日本語の表記ができなかったり、パスワードと併記してユーザーネームなども同時に付け加えたい時などには、カスタムでパスワードフィールドを作る必要が出てきます。
暗号化されるパスワード
始めに ask password のコマンドから見てみましょう。
トップに書いたシンタックスはちょと複雑なので、マルチラインメッセージボックスに単純に
ask password ""
put it
とするだけで、パスワード入力のダイアログが出てきます。入力されるパスワードは英数字でないと機能しません。一文字づつ星印(アストリスク)に変換されて、他の人には読めないようになっています。入力された文字列は it に収納されるので、 put it でメッセージボックスに書き出してみると、入力した文字列とは違った文字列がでてきます。これはRevolution 自体がある法則で暗号化しているためです。たとえば「ABCD」とタイプすると必ず「&>Z@」と暗号化されるので、入力したものがはたして正しいパスワードかの判断はできるのですが、どんな場合に使ったら有効なのか、私自身もうひとつ理解していない部分があります。まあ、これはそういうことが実際に必要になったら、思い出す程度に試してみるのが良いでしょう。
隠してタイプしたパスワードを、普通の文字列で受ける
一般的に使いやすいのはむしろ
ask password clear ""
put it
とする方法で、こちらもタイプした文字は星印(アストリスク)に変換されて読めませんが、 it にはそのもとのパスワードの文字列が入ります。つまり「ABCD」とタイプすると、必ず it で「ABCD」と受けることができるので、わかりやすいですね。またいろいろな応用も、利かせやすいかと思えます。
ask password clear "password:" with "ABCD" titled "Password Clear"
011.rev の2番目のボタンにある、このシンタックスで実際に出てくるダイアログは下図です。

ask password clear "" と比べると、コーテーションに「password:」が入っていて、パスワードをタイプするフィールドの上に「password:」と出ています(普通の ask などと同じですが)。つぎの「with "ABCD"」はデフォルトアンサーで、パスワードのフィールドにはアストリスクで出ます(もしこのまま OK ボタンを押すと、「ABCD」が it に入ります)。question [with defaultAnswer] は実際には必要ないことが多いかもしれません。最後の titled はこのパスワードのダイアログのウインドウタイトルになります。またトップに書いたシンタックスの[as sheet] は、MacOSX だけで有効な ask password を指示したウインドウ(ペアレントスタック) の、トップからシートを降ろすダイアログのパラメータです。
カスタムでパスワードフィールドを作る
以上のふたつは簡単に使えるので便利ですが、日本語の指示を書いたダイアログや、他にユーザーネームなどを併記する場合には、タイプした文字列がアストリスクに変換されて、しかもその文字列が取り出せるフィールドをカスタムで作らなければなりません。011.rev の三番目にあるものがそれです。パスワードのフィールドには以下のスクリプトを入れています。
global gPass
on keydown whichKey
put whichKey after gPass
set the cPassword of fld "tPassword" to gPass
repeat the num of chars of gPass
put "*" after tPassword
end repeat
put tPassword into fld "tPassword"
select after fld "tPassword"
end keyDown
on backspacekey
if fld "tPassword" is empty then
set the cPassword of fld "tPassword" to ""
else
delete last char of fld "tPassword"
delete last char of gPass
set the cPassword of fld "tPassword" to gPass
end if
end backspacekey
on returnInField
--
end returnInField
on enterInField
--
end enterInField
パスワードは、フィールド内の keydown で得た一文字づつを、そのフィールドに作った cPassword と言うカスタムプロパティに、積み重ねてゆくと言う考えです。
global gPass
on keydown whichKey
put whichKey after gPass
set the cPassword of fld "tPassword" to gPass
-- この部分略
end keydown
次に put "*" after fld "tPassword" としないで、毎回キャラクター数を数えて repeat でアストリスクに置き換えているのは、もし日本語で誤ってフィールドにタイプした後、フィールドに英数字を打ち込んで 、after でフィールドにアストリスクを続けて行くと文字化けになってしまうので、それを防ぐため、一括してタイプした文字数だけのアストリスクを put で入れています。
repeat the num of chars of gPass
put "*" after tPassword
end repeat
put tPassword into fld "tPassword"
select after fld "tPassword"
最後の行 select after fld "tPassword" は、put でフィールドに一連のアストリスクを入れると、カーソルが先頭で点滅してしまうので、文字列の最後を select しておきます。
on backspacekey
if fld "tPassword" is empty then
set the cPassword of fld "tPassword" to ""
else
-- この部分略
end backspacekey
フィールド内でバックスペースキーがたたかれた時に、パスワードを一文字づつ消してゆくのですが、何かのアクジデントでカスタムプロパティに文字列が残ってしまうことを想定して、もしフィールドに何もなかったらカスタムプロパティをカラにする措置をとっています。これをしておかないとアクジデントで文字が残ってしまったら、永久に取り除けない結果になってしまいますから、意外と大事ですね。この IF 以外は、フィールドとカスタムプロパティの the cPassword of me から、一文字づつ取り除いているだけです。
最後の
on returnInField
--
end returnInField
on enterInField
--
end enterInField
は、フィールド内でリターンや、エンターがヒットされた時に、改行されたり、その他のアクションが行われないようにしています。
このフィールドに隠されたパスワードを読み取るのは、
put the cPassword of fld "tPassword"
で、普通のカスタムプロパティを読み取る方法と同じです。
パスワードフィールドは念のために、チェックボックスでロックできるようにしておいた方が良いでしょうね。
on mouseUp if the hilight of me then set lockText of fld "tPassword" to true
else set lockText of fld "tPassword" to false
end mouseUp
最後に非常に大事なことがあります。
パスワードを作ったこのスタック自体を暗号化しておかないと、BBEdit などのテキストプログラムでスタックを開くと、容易にパスワードが読み取られてしまいます。スタンドアロンにする時に、ファイルメニューにある Standalone Application Settings を開いたら、「Stacks」の項目の右下にある Encrypt with password にチェックを入れて、そのスタンドアロンにするスタックのパスワードを設定しておきます。

この場合は「mySecret」というパスワードにしています。スタンドアロンでなくスタックで配布するような場合には、同じ設定を以下のスクリプトでできます。
注:サブスタックをいくつか作っていたら、メイン、サブ等すべてのスタックを上図のハイライトの状態にしないと暗号化されません。
set the password of this stack to "mySecret"
試みに 011.rev をいったん Save したら、メッセージボックスから上のスクリプトを実行することで、スタック自体の暗号化が行われます。解除するにはいったんどこでもスクリプトを開けてパスワード「mySecret」を打ち込んで OK をしたら、今度は上のスクリプトの "mySecret" を empty に変えて実行し Save します。
|