スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

javascript, PHP で簡単な難読化(シーザー暗号化)

javascriptでの可逆暗号化はすごくハードルが高い。
なぜなら誰でもコードを見れてしまうから。

でもたまにGET(URLのパラメータ)でPHPに文字列を渡したい時に平文では気がひけることがある。
例えばメールアドレスをこんな風に渡す場合

http://example.php?email=mail@gmail.com

パラメータの部分を難読化出来ないかな?と思う。
そこで昔ながらの方法。
アルファベットをN文字ずらすという、いわゆるシーザー暗号化。

例えば1文字ずらす場合はこう、
a -> b
0 -> 1

2文字ずらす場合はこう
a -> c
0 -> 2

この「ずらす」というのはアスキーコードで決まっている並びをずらすという意味で、文字列を一度アスキーコードの数値になおしてからそこにNを加算し、再度文字列に戻すという作業になる。

例えば、
a(97) -> 97 + 1 -> b(98)
0(48) -> 48 + 1 -> 1(49)

といった形。
これをjavascriptでやるとこうなる。

var target = "a"; //a(97)
var tmp = target.charCodeAt(i) + 1; //98
var result = String.fromCharCode(tmp); //b(98)

で、これをPHPで戻すには

$target = $_GET['param'];//b(98)
$tmp = ord($target) - 1; //97
$result = chr($tmp);//a(97)

あくまでも難読化であってしっかりとした暗号化ではない。
javascriptのコードを読まれれば直ぐにバレる方法。
すべて1文字ずらすことで統一するとコードを見なくてもすぐにバレるので、文字列を難読化する場合は例えば

【javascrpit】難読化
var email = "email@gmail.com";
var result="";
for(var i=0;i tmp = email.charCodeAt(i) + i%3; //iの値によって0または1または2文字ずらす
result += String.fromCharCode(tmp);//ずらした結果をresultに結合して結果の文字列を作る
}

【PHP】複合
$target = $_GET['param'];//email@gmail.com
$result = '';
for($i=0;$i $tmp = ord($targetl[$i]) - $i%3;//$iの値によって0または-1または-2文字ずらす
$result .= chr($tmp);//ずらした結果をresultに結合して結果の文字列を作る
}


あんまり活躍の場は無いかもしれないけど覚書。

コメント

コメントの投稿

非公開コメント

PR

PR

プロフィール

何でも書くman

Author:何でも書くman
思ったことや備忘録など、とりあえずなんでも書きます。IT系のことや趣味、生活に関わることなども。

ページの先頭へ戻る
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。