JavaScript難読化処理
 のためのヒント

▼▽ Instant Access Menu ▽▼



無線ブロードバンドならイー・モバイル


7.アルファベットを一文字ずつずらす+evalメソッド(疑似暗号化)

6-1のソースはURLエンコードされており、一目では分かりませんが、上級者に通用するかは分かりません。「charCodeAt」や「length」など、JavaScriptでキーワードとなる文字列がそのまま残っています。

そこで、簡単な暗号化を考えてみます。「暗号」というととても難しく考えがちですが、簡単なレベルのものでも十分実用的です。あまり複雑にしすぎても処理能力に影響が出る可能性すらあり、あまりお勧めできません。

シーザー暗号というのをご存じでしょうか? 「原文のaをdに、cをfにする。暗号化された文章では、逆にd→a、f→cにする」。いかにも単純だ。しかし、3個ずらしているという法則が漏れなければ、なかなか復号はできません。

ここでは、「難読化処理のためのヒント 」というタイトル通り、ヒントをご紹介することに重点を置いているため、1個ずつずらすことを考えます(本当はもう少し複雑な方がいいですが、あくまでも『アイデアの提供』ということで・・・)。下記のフォームに「abc」を入力すれば「bcd」と表示されます。同様にして、第5章の5-1のソース(6-1ではないことに注意してください。URLエンコードする前のソースが必要です。)を変換してみます。ずらした変換結果をもとに戻す関数は後で考えます。

変換したい文字列を入力してください。

  
↓ 一文字ずつずらされ、さらにescapeされた変換結果が表示されます。
 皆さんのソースを使って変換される場合には、必ずバックアップを取ってから行ってください。このページに限らず、当サイトは無保証です。

こうして、一文字ずつずらした上でURLエンコードしておいたものをさらに復元するためのコードが必ず必要になってきます。暗号化するときには、一文字ずつつcharcodeをプラスして、それをさらにURLエンコードしたのだから、復号するときは逆に、URLでコード(unescapeメソッドを使用)して、さらに、一文字ずつcharcodeをマイナスさせればOKのはずです。

ソース7-1(このままは使用できません。実際には、下記の「hogehoge」の部分を上のフォームで暗号化したソースに書き換える必要があります。すなわち、7-2がこの章における最終的な成果になります。)

この「J="hogehoge";」の部分は実際には、上のフォームで第5章のソース5-1を変換した結果を使う必要があります。上の7-1は、あくまでも元に戻すアルゴリズムが見えやすいようにするためのものです。ですから、実際には、

ソース7-2
が求める結果となります。

 本当は、「J="******";(改行)J+="******";」と分割する必要はないのですが、ホームページ上に改行のないソースをテキストエリア内に表示させる時に、一定文字数以上だとMac版FirefoxやMac版Netscapeで正しく表示できない不具合があるため、このようにしています。あくまでもこの講座の目的としてソースを表示させる上で必要な便宜上の処理であり、実際には分割しなくてもMac版FirefoxやNetscapeでもJavaScriptは動きます。)

ファイルサイズも単にURLエンコードを施したサンプル6-1に比べて、約7%も減らすことができました。

1個ずつずれていることを、出だしの「t%3ETusjoh」で検証してみますと、「t」の前は「s」、「%3E」をデコードすれば「>」であり、その一つ前は「=」、「T」の前は「S」、「u」の前は「t」、「s」の前は「r」、「j」の前は「i」、「o」の前は「n」、「h」の前は「g」。「s=String・・・」となります。

この難読化したソースを実際に外部ファイル化して、下記の入力フォーム・サンプルで入力チェックができるようにしています。難読化しても問題なく動作することを確認してください。

▼ よくある入力フォームとJavaScriptによるチェック(検証用サンプル)
名前:
フリガナ:
メールアドレス:
  

 このフォームで使われているJavaScript
ここでひとつ気になるのは、「一つずつずらしているのでは?」というのが、「String.fromCharCode(y-1);」の部分の「-1」で丸わかりになっているかもということです。これが簡単には分からないようにする方法を次のページでは考えてみます。ビット演算子を用いてみます。

  目次:

連絡先:info@broadband-xp.com
【PR】 HTML・JavaScript暗号化ソフト「SHTML」

(免責事項)このホームページの内容に起因する如何なるトラブルに対しても責任を持ちえません。必ず自己責任でご利用ください。

【広告】 PDF保存対策なら「PDF No Save