マルチドメイン対応、ビジネス仕様 高性能レンタルサーバー 【シックスコア】
9.String.fromCharCodeメソッドを少し変形させる
ソース2-2で日本語の文字列を英数字に置き換え、String.fromCharCodeメソッドで元の文字に戻すやり方を紹介しました。この方法では、ファイルサイズが大きくなり過ぎることが一つの問題だったのですが、ここでひとつの対策法をご紹介します。
ファイルサイズが大きい理由の一つは、原文の日本語1文字(2バイト)に対して数字は5桁(5バイト)になっていることがあります。これを減らすことを考えます。ソース2-2をよく見ると、12300台が多いのが分かります。12354番が「あ」ですから、ひらがながこの辺りの数字であるためにそうなっているのが分かります。
そこで、単純に引数の数字をString.fromCharCodeで元に戻すのではなく、「あらかじめ12350を引いた番号を引数に与える形にしておいて、元に戻す関数が実行される際に12350を加えて元に戻す」という方法を考えてみます。すなわち、
のようにします。引数の数が一定でないので、「arguments.length」でループさせて処理させています。これで復元させる方の関数は良いですが、本来のcharcodeから12350を引いた引数を準備する必要があります。これは、下記のフォームを利用してください。たとえば、「あいうえお」を変換させると、「s2(4,6,8,10,12);」になります。もちろんs2とは、上のソース9-1で定義した関数のことです。
これらのことを踏まえて、第1章のソース1-2をいったん下記のように、コメント付きで変換します。
のようになります。マイナスの数も出てきて、いい感じです。
そこで、このソースをさらにコメントを削除したり(第1章を参照)、余計な半角スペースを削除する(第5章を参照)、よく出てくるオブジェクト(ここではdocumentとalert。)の名称を変更する(第4章を参照)ことにより、難読化を行います。
また、12350という数字を隠したいので、これをビット演算子(第8章を参照)で表してみます。
のようになります。こうすることで、単純にString.fromCharCodeを別の関数名に変更したソース5-1に比べて、約15%もファイルサイズの縮小に成功しています。
この難読化したソースを実際に外部ファイル化して、下記の入力フォーム・サンプルで入力チェックができるようにしています。難読化しても問題なく動作することを確認してください。
▼ よくある入力フォームとJavaScriptによるチェック(検証用サンプル)
|
まだまだ、難読化のためのヒント・アイデアはあります。次のページで、これまで紹介しきれなかったその他のテクニックを一挙ご紹介します。
目次:
|