お寿司か焼き肉食べたい

まじめな事からしょーもない事まで
めにゅーを開く(投げやり)

貴様にくれてやるメールアドレスなどない

mailtoの暗号化方法をやってみた。

サービスはあるけど

mailtoの暗号化って色々ありますよね。
でもなんか、メールアドレスを入力したらそれに対応するscriptが出てくる感じばかりで
え、それ自体がメールアドレス収集になってるんじゃねwwwみたいに疑心暗鬼になってしまいます。
じゃぁ自分でやればいいじゃんという事で、作ってみました。

なんで暗号化しないといけないのか

botとかでサイトを駆け巡り、【@】や、【mailto:】という文字列を判定してメールアドレスを抜き取るわけです。
スパムメールが送信し放題なわけです。
この手の手法は手動で行われているわけではないです。割に合わないので手動ではしません(たぶん。)
では、人間が見ればわかるけど、botとかが分からないようにすればいいのでは?という考えから
暗号化をする事になっています。

早速、メールアドレスの文字コード化から

メールアドレスの文字コード化をしてみましょう。

謎の数字がでてきたと思います。
こいつが、文字コード(厳密には、Unicode コードポイントを10進数値にしたもの。つまり、文字コードをさらに数字化したものって感じです)です
で、これだけだと変換したら丸わかりなので、各数字、-1したものを出しています。
つまり、表示された数字をそのままデコード(元に戻す)しても、元通りにはならないわけです。おほぉー

次、mailto偽装とjsコード

文字コード化が済んだら次はmailtoの生成jsを。
手直しが必要なのは、コードの埋め込みと、aタグの場所だけ


// html側には <a href="javascript:void(0);" class="mai_l_c" ></a>が記述してあるとします。

//---------------------------------------
// jQueryバージョン
//---------------------------------------
 var nameString = converter(String.fromCharCode(【さっき生成した暗号化済コード】));
     targetElem = $('.mai_l_c'); // mailtoを出したい所のaタグを指定するように

  targetElem.empty().text(nameString);

  targetElem.on('click',function()
  {
    location.href="mai"+"lto:"+nameString;
  });

 function converter(M){
  var str="", str_as="";
  for(var i=0;i<M.length;i++)
  {
    str_as = M.charCodeAt(i);
    str += String.fromCharCode(str_as + 1);
  }
  return str;
 }

//------------------------------------------
// ネイティブなjavascript
//------------------------------------------
 // getElementsByClassNameはIE8未対応なので使ってない方法で

 var nameString  = converter(String.fromCharCode(【さっき生成した暗号化済コード】)),
   targetElems = document.getElementsByTagName('a'),
   targetElems2 = new Array();

 for(var i=0;i<targetElems.length;i++)
 {
  if(targetElems[i].hasAttribute('class') == true )
  {

   if(targetElems[i].getAttribute('class') == 'mai_l_c')
   {
    targetElems2.push(targetElems[i]);
   }
  }
 }
 for(var i=0;i<targetElems2.length;i++)
 {
  console.log(nameString);
  targetElems2[i].textContent = nameString;
  targetElems2[i].onclick = function()
  {
   location.href="mai"+"lto:"+nameString;
  }
 }

 function converter(M)
 {
  var str="", str_as="";
  for(var i=0;i<M.length;i++)
  {
   str_as = M.charCodeAt(i);
   str += String.fromCharCode(str_as + 1);
  }
  return str;
 }

結果

html側からもJS側からも、メールアドレスが消え去りました。おほぉー
おまけに
【location.href="mai"+"lto:"+nameString;】
こうすることで、mailtoではなく、maiとltoと分断され、mailtoと分かりにくくなっとります。
完璧に防げるものではないですが、これくらいしてやればある程度安心なのではと思います。