Step.16 - パスワードを 暗号化!? する


パスワードを入力してリンクするようにしたけど、ソースを見たらバレバレでは全く意味ありません。見ただけでは分からない程度まで暗号化してみましょう。


Step テーマ
● String.fromCharCode 文字コード変換

実行例


ここは家族専用です→
※ ちなみにパスワードは pass1です。


リスト


<script type="text/javascript"><!--
function myEnter(){
     myPassWord = prompt("Tatsuya家のパスワードを入力してください","");
     if ( myPassWord == String.fromCharCode(112,97,115,115,49) ){
         location.href = String.fromCharCode(115,101,99,114,101,116)+".htm";
     }else{
         alert( "パスワードが違います!" );
     }
}
// --></script>

<form>
ここは家族専用です→
<input type="button" value="Tatsuya家へ入る" onclick="myEnter()">
</form>


サンプルだけの HTMLは こちらへ

説明


このサンプルは前回の Step のパスワード比較部分を ソースを見ただけではわからないように 暗号化!? しました。

if ( myPassWord == "pass1" ){
    location.href = "secret.htm";
}
            ↓
if ( myPassWord == String.fromCharCode(112,97,115,115,49) ){
    location.href = String.fromCharCode(115,101,99,114,101,116)+".htm";
}

String.fromCharCode( 文字コード ) は、文字コードを文字に変換します。

ひとつひとつの文字には文字コードが割り付けられています。
コンピュータは結局は 文字ではなく 文字コードで処理しています。
String.fromCharCode() は、その文字コードを 私たちが分かる文字へ変換してくれます。
といっても、文字コード=文字 ですから 表現を変えただけのことです。

文字コード表
  32 48 64 80 96 112
0   0 @ P   p
1 ! 1 A Q a q
2 " 2 B R b r
3 # 3 C S c s
4 $ 4 D T d t
5 % 5 E U e u
6 & 6 F V f v
7 ' 7 G W g w
8 ( 8 H X h x
9 ) 9 I Y i y
10 * : J Z j z
11 + ; K [ k {
12 , < L \ l |
13 - = M ] m }
14 . > N ^ n ~
15 / ? O _ o  

該当する文字の上の数字と左の数字を足したものが、その文字コードです。
"s" でしたら、112 + 3 = 115 となります。半角スペースは 32 + 0 = 32 です。

書式は、myStr = String.fromCharCode( 文字コード ) です。
myStr = String.fromCharCode( 115 )
とすれば、myStr には、"s" が入ります。

また、パラメータにカンマ区切りで続けてセットすればその文字列が myStr にセットされます。
myStr = String.fromCharCode( 115, 101, 99, 114, 101, 116 );
とすれば、myStr は "secret" です。


暗号化といっても、ソースが見れる以上、解読は容易です。
今回も暗号化とはいうものの、文字コードはプログラマーにとってはご用達、"s" が 115 なんて当たり前のことなのです。
また、今回の例でいえば、myStr を document.write すればバレバレです。 (^^;

ま、検索エンジンから URL を拾われることは なくなったとは思いますが ^^;

どうしても JavaScript で解読できないようにしたければ、Step.79 へ。


● 参考ステップ
Step.15 パスワードを入力してリンクしてみましょう ※ パスワード関連
Step.35 秘密の裏口をつくってみましょう ※ パスワード関連
Step.79 パスワードを入力してリンクしてみましょう その3 ※ パスワード関連

● リファレンス
location.href
alert
prompt
if

Q&A 1


[Q] pwd = "%u30A4%u30CC%u3067%u3082%u308F%u304B%u308B"
       こういったものも、暗号化されたパスワードということでよろしいのでしょうか?

[A] 単にユニコードのURLエンコードされた文字列なので、これも暗号化には ほど遠いかと思われます。

       このコードは、escape, unescape にて、エンコード、デコード可能です。
       詳しく?は、Step.63 「小さな子ウィンドウを作ってBGMを流してみましょう その3」を参照してください。