ObfuscateMe (Joomla! plugin)

Update

ObfuscateMe released for Joomla 1.7 & 2.5.

About

ObfuscateMe is a Joomla! 1.5, 1.7 & 2.5 extension that hides part of (or whole) pages into JavaScript code in order to prevent (primarily) spambots to gather e-mail addresses from your published content. But it also prevents the content to be seen by web crawlers (like Google's, Yahoo!'s) who don't execute the JavaScript code in the pages they visit.

It hides anything, be it plain text or HTML, except for JavaScript code you want to be executed on the client side (which it hides from bots, but will not be executed).

For clients who don't have JavaScript enabled, it displays a customizable fall-back message.

In over two years of being published in the contact page and obfuscated with this plugin (check that page's source), I have got no spam in the mailbox of my e-mail address.

How it works

On the server's side, the page part to be obfuscated is encrypted with the simplest of all encryption algorithms (Caesar cipher) and a random key. On the client's side, the ciphertext is transformed into plaintext by JavaScript.

Though the encryption is simple, the text will appear to bots as a string of random alphanumeric characters, good enough for hiding it. The weakest link is not the strength of the encryption (because the decryption is automatic in the client's browser, so it needs the key anyway), but the ability of the bot to execute Javascript.

Usage

In the article editor

  {obfuscate}
  <!-- insert plain text, or well formatted HTML code here -->
  <!-- insert anything -->
  <!-- except for JavaScript code you want to be executed -->
  {/obfuscate}

You can have as many {obfuscate}{/obfuscate} tags as you wish in one page. Check the live examples below.

Configuration (in the Plugin Manager)

  • Alternative tag to trigger the plugin: Here you can write another trigger for the plugin. E.g. if you write here NewTriggeringTag, you'll invoke the plugin with: {NewTriggeringTag}{/NewTriggeringTag}.
  • Alternative message when JavaScript is not enabled: If the client browser has JavaScript disabled, this message will appear informing the user he needs to enable JavaScript. Let the field blank for the default message.

Conflicts with other plugins

  • Email Cloaking: If you intend to obfuscate e-mail addresses, you have to disable this plugin which is superseded by ObfuscateMe. (Email Cloaking transforms any e-mail address into JavaScript code which is executed by the browser — see below.)
  • Generally, any plugin that will generate JavaScript code (e.g. as does Email Cloaking) between {obfuscate}{/obfuscate} tags will not work, because ObfuscateMe encrypts that part, sends it to the browser, which decrypts and displays it via JavaScript. And a piece of JavaScript code written in the document by another piece of JavaScript code will not be executed.

Live examples

Refresh the page. The IDs, the cyphertext, and the key in the generated HTML will change. The content seen by the user will remain the same.

When you use more than one pair of {obfuscate}{/obfuscate} tags in the same page, the probability of name collisions in the generated code between different chunks of obfuscated data is practically zero (the suffixes' namespace size is 62^12 = 3226266762397899821056 > 10^21).

Example #1 (simple text):

  1. Joomla code:
    {obfuscate}a simple text{/obfuscate}
  2. Generated HTML source:
    <!-- ObfuscateMe -->
    <span id='m31_wrapper_o0T97P5X0HHA' class='m31_encr_wrapper'>
    <span id='m31_cyphertext_o0T97P5X0HHA' class='m31_encr_item'>48075a505457534c075b4c5f5b</span>
    <span id='m31_token_o0T97P5X0HHA' class='m31_encr_item'>TSAc6QKXX8T4BM7fsvfK4njAJjRbu73</span>
    <span id='m31_algorithm_o0T97P5X0HHA' class='m31_encr_item'>caesar</span>
    <!-- fallback if no javascript -->This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.<!-- /fallback --></span>
    
    <script type='text/javascript' language='JavaScript'>
    var encr_cyphertext = document.getElementById('m31_cyphertext_o0T97P5X0HHA').innerHTML;
    var encr_token      = document.getElementById('m31_token_o0T97P5X0HHA').innerHTML;
    var encr_algorithm  = document.getElementById('m31_algorithm_o0T97P5X0HHA').innerHTML;
    var encr_plaintex   = '';
    
    document.getElementById('m31_wrapper_o0T97P5X0HHA').innerHTML = 'loading...';
    switch (encr_algorithm)
    {
      case 'caesar':
        encr_plaintex = m31_CaesarDecrypt(m31_hexDecode(encr_cyphertext),m31_CaesarKeyFromToken(encr_token));
        break;
      default:
    }
    document.getElementById('m31_wrapper_o0T97P5X0HHA').innerHTML = encr_plaintex;
    </script>
    <!-- /ObfuscateMe -->
    
    
  3. HTML output:
    69287b717578746d287c6d807c lAFc5vx9hfJ0OlbHtfd9haYArT9GrCrb caesar This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.

Example #2 (HTML elements):

  1. Joomla code:
      {obfuscate}
      a <b>formatted</b> <i>text</i> is also <span style="color:yellow">possible</span>,<br/>
      as well as an e-mail address: <a href="mailto:account@mailserver.com">account@mailserver.com</a>
      {/obfuscate}
      
  2. Generated HTML source:
      <!-- ObfuscateMe -->
    <span id='m31_wrapper_N6DT09cipwiD' class='m31_encr_wrapper'>
    <span id='m31_cyphertext_N6DT09cipwiD' class='m31_encr_item'>35484889484e949c639b9c9a97968f4e8f9c638e979a95899c9c8d8c4e949c63579b9c9a97968f4e8f9c63484e949c63914e8f9c639c8da09c4e949c6357914e8f9c6348919b4889949b974898979b9b918a948d5432354848899b489f8d949448899b488996488d559589919448898c8c9a8d9b9b62484e949c638948909a8d8e654a958991949c9762898b8b979d969c68958991949b8d9a9e8d9a568b97954a4e8f9c63898b8b979d969c68958991949b8d9a9e8d9a568b97954e949c6357894e8f9c63354848</span>
    <span id='m31_token_N6DT09cipwiD' class='m31_encr_item'>JUZy6jfhGpXjznaAeBYkO0lYdTMZBZFU</span>
    <span id='m31_algorithm_N6DT09cipwiD' class='m31_encr_item'>caesar</span>
    <!-- fallback if no javascript -->This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.<!-- /fallback --></span>
    
    <script type='text/javascript' language='JavaScript'>
    var encr_cyphertext = document.getElementById('m31_cyphertext_N6DT09cipwiD').innerHTML;
    var encr_token      = document.getElementById('m31_token_N6DT09cipwiD').innerHTML;
    var encr_algorithm  = document.getElementById('m31_algorithm_N6DT09cipwiD').innerHTML;
    var encr_plaintex   = '';
    
    document.getElementById('m31_wrapper_N6DT09cipwiD').innerHTML = 'loading...';
    switch (encr_algorithm)
    {
      case 'caesar':
        encr_plaintex = m31_CaesarDecrypt(m31_hexDecode(encr_cyphertext),m31_CaesarKeyFromToken(encr_token));
        break;
      default:
    }
    document.getElementById('m31_wrapper_N6DT09cipwiD').innerHTML = encr_plaintex;
    </script>
    <!-- /ObfuscateMe -->
    
    
      
  3. HTML output:
    02ff151556153168696764635c335b6467625669695a59312468696764635c3315315e33695a6d6931245e33155e6815566168641531686556631568696e615a321758646164672f6e5a6161646c1733656468685e57615a312468655663332131576715243302ff15155668156c5a6161155668155663155a2262565e6115565959675a68682f153156155d675a5b321762565e6169642f565858646a63693562565e61685a676b5a67235864621733565858646a63693562565e61685a676b5a67235864623124563302ff1515 45pGeYefJBHmYqx74RBtuLP1CAzbgtml caesar This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.

Example #3 (HTML elements - a more complex example):

  1. Joomla code:
      {obfuscate}
      <table style="border:solid 1px red;width:30%;text-align:center">
      <tr>
        <td style="color:blue">00</td>
        <td>01</td>
      </tr>
      <tr>
        <td>10</td>
        <td>11</td>
      </tr>
      </table>
      {/obfuscate}
      
  2. Generated HTML source:
    <!-- ObfuscateMe -->
    <span id='m31_wrapper_za0d8fHSqYDO' class='m31_encr_wrapper'>
    <span id='m31_cyphertext_za0d8fHSqYDO' class='m31_encr_item'>bdbdbdbdbdbdc30911d811feff0902bd1011160902dabfff0c0f01020fd7100c090601bdce0d15bd0f0201d81406011105d7d0cdc2d811021511cafe0906040bd700020b11020fbfc30411d8bdbdbdc30911d8110fc30411d8bdbdbdbdbdc30911d81101bd1011160902dabf000c090c0fd7ff091202bfc30411d8cdcdc30911d8cc1101c30411d8bdbdbdbdbdc30911d81101c30411d8cdcec30911d8cc1101c30411d8bdbdbdc30911d8cc110fc30411d8bdbdbdc30911d8110fc30411d8bdbdbdbdbdc30911d81101c30411d8cecdc30911d8cc1101c30411d8bdbdbdbdbdc30911d81101c30411d8cecec30911d8cc1101c30411d8bdbdbdc30911d8cc110fc30411d8c30911d8cc11feff0902c30411d8</span>
    <span id='m31_token_za0d8fHSqYDO' class='m31_encr_item'>AWTchLV2kXFvVqbNbLMBLzKFmqozEC9</span>
    <span id='m31_algorithm_za0d8fHSqYDO' class='m31_encr_item'>caesar</span>
    <!-- fallback if no javascript -->This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.<!-- /fallback --></span>
    
    <script type='text/javascript' language='JavaScript'>
    var encr_cyphertext = document.getElementById('m31_cyphertext_za0d8fHSqYDO').innerHTML;
    var encr_token      = document.getElementById('m31_token_za0d8fHSqYDO').innerHTML;
    var encr_algorithm  = document.getElementById('m31_algorithm_za0d8fHSqYDO').innerHTML;
    var encr_plaintex   = '';
    
    document.getElementById('m31_wrapper_za0d8fHSqYDO').innerHTML = 'loading...';
    switch (encr_algorithm)
    {
      case 'caesar':
        encr_plaintex = m31_CaesarDecrypt(m31_hexDecode(encr_cyphertext),m31_CaesarKeyFromToken(encr_token));
        break;
      default:
    }
    document.getElementById('m31_wrapper_za0d8fHSqYDO').innerHTML = encr_plaintex;
    </script>
    <!-- /ObfuscateMe -->
    
    
  3. HTML output:
    8e8bbdf5e2e3ede6a1f4f5faede6bea3e3f0f3e5e6f3bba1f4f0edeae5a1b2f1f9a1f3e6e5bca1f8eae5f5e9bba1b4b1a6bca1f5e6f9f5aee2edeae8efbba1e4e6eff5e6f3bca3a1e3f0f3e5e6f3bea3b1a3bf8e8bbdf5e3f0e5fabf8e8bbdf5f3bf8e8bbdf5e5a1f4f5faede6bea3e4f0edf0f3bbe3edf6e6a3bfb1b1bdb0f5e5bf8e8bbdf5e5bfb1b2bdb0f5e5bf8e8bbdb0f5f3bf8e8bbdf5f3bf8e8bbdf5e5bfb2b1bdb0f5e5bf8e8bbdf5e5bfb2b2bdb0f5e5bf8e8bbdb0f5f3bf8e8bbdb0f5e3f0e5fabf8e8bbdb0f5e2e3ede6bf8e8b Ff9a1KwewFPm3O0FYkuIBuZeeLMIdvX caesar This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.

Example #4 (non-ASCII characters):

If your OS does not have installed a font with proper Eastern European characters (in this case s and t with comma for Romanian), you will see scrambled text (mojibake) both in source and output.

  1. Joomla code:
      {obfuscate}
      <span style="font-size:120%"><b>LUCEAFĂRUL</b></span><br/>
      <span style="color:#999999"><i>a poem by Mihail Eminescu</i></span><br/>
      <br/>
      A fost odată ca-n povești <br/>
      A fost ca niciodată, <br/>
      Din rude mari împărătești, <br/>
      O prea frumoasă fată.<br/>
      <br/>
      Și era una la părinți <br/>
      Și mândră-n toate cele, <br/>
      Cum e Fecioara între sfinți <br/>
      Și luna între stele.<br/>
      <br/>
      Din umbra falnicelor bolți <br/>
      Ea pasul și-l îndreaptă <br/>
      Lângă fereastră, unde-n colț <br/>
      Luceafărul așteaptă.<br/>
      <br/>
      Privea în zare cum pe mări <br/>
      Răsare și străluce, <br/>
      Pe mișcătoarele cărări <br/>
      Corăbii negre duce,<br/>
      <br/>
      Îl vede azi, îl vede mâni,<br/>
      Astfel dorința-i gata; <br/>
      El iar, privind de săptămâni, <br/>
      Îi cade dragă fata.
      {/obfuscate}
      
  2. Generated HTML source:
    <!-- ObfuscateMe -->
    <span id='m31_wrapper_I37JN2J1zYRl' class='m31_encr_wrapper'>
    <span id='m31_cyphertext_I37JN2J1zYRl' class='m31_encr_item'>969ce2eab1e9e6d7e496e9eaefe2dbb398dce5e4eaa3e9dff0dbb0a7a8a69b989cddeab19ce2eab1d89cddeab1c2cbb9bbb7bc9c99a8abaeb1c8cbc29ce2eab1a5d89cddeab19ce2eab1a5e9e6d7e49cddeab19ce2eab1d8e8a59cddeab1969ce2eab1e9e6d7e496e9eaefe2dbb398d9e5e2e5e8b099afafafafafaf989cddeab19ce2eab1df9cddeab1d796e6e5dbe396d8ef96c3dfded7dfe296bbe3dfe4dbe9d9eb9ce2eab1a5df9cddeab19ce2eab1a5e9e6d7e49cddeab19ce2eab1d8e8a59cddeab19ce2eab1d8e8a59cddeab1b796dce5e9ea96e5dad7ea9c99a8abafb196d9d7a3e496e6e5ecdb9c99aba9adb1eadf969ce2eab1d8e8a59cddeab196b796dce5e9ea96d9d796e4dfd9dfe5dad7ea9c99a8abafb1a2969ce2eab1d8e8a59cddeab196badfe496e8ebdadb96e3d7e8df969cdfd9dfe8d9b1e3e69c99a8abafb1e89c99a8abafb1eadb9c99aba9adb1eadfa29ce2eab1d8e8a59cddeab196c596e6e8dbd796dce8ebe3e5d7e99c99a8abafb196dcd7ea9c99a8abafb1a49ce2eab1d8e8a59cddeab1969ce2eab1d8e8a59cddeab1969c99aba9acb1df96dbe8d796ebe4d796e2d796e69c99a8abafb1e8dfe49c99aba9afb1df969ce2eab1d8e8a59cddeab1969c99aba9acb1df96e39cd7d9dfe8d9b1e4dae89c99a8abafb1a3e496eae5d7eadb96d9dbe2dba2969ce2eab1d8e8a59cddeab196b9ebe396db96bcdbd9dfe5d7e8d7969cdfd9dfe8d9b1e4eae8db96e9dcdfe49c99aba9afb1df969ce2eab1d8e8a59cddeab1969c99aba9acb1df96e2ebe4d7969cdfd9dfe8d9b1e4eae8db96e9eadbe2dba49ce2eab1d8e8a59cddeab19ce2eab1d8e8a59cddeab196badfe496ebe3d8e8d796dcd7e2e4dfd9dbe2e5e896d8e5e29c99aba9afb1df969ce2eab1d8e8a59cddeab196bbd796e6d7e9ebe2969c99aba9adb1dfa3e2969cdfd9dfe8d9b1e4dae8dbd7e6ea9c99a8abafb1969ce2eab1d8e8a59cddeab1c29cd7d9dfe8d9b1e4dd9c99a8abafb196dcdbe8dbd7e9eae89c99a8abafb1a296ebe4dadba3e496d9e5e29c99aba9afb1969ce2eab1d8e8a59cddeab196c2ebd9dbd7dc9c99a8abafb1e8ebe296d79c99aba9adb1eadbd7e6ea9c99a8abafb1a49ce2eab1d8e8a59cddeab1969ce2eab1d8e8a59cddeab196c6e8dfecdbd7969cdfd9dfe8d9b1e496f0d7e8db96d9ebe396e6db96e39c99a8abafb1e8df9ce2eab1d8e8a59cddeab196c89c99a8abafb1e9d7e8db969c99aba9adb1df96e9eae89c99a8abafb1e2ebd9dba2969ce2eab1d8e8a59cddeab196c6db96e3df9c99aba9adb1d99c99a8abafb1eae5d7e8dbe2db96d99c99a8abafb1e89c99a8abafb1e8df969ce2eab1d8e8a59cddeab196b9e5e89c99a8abafb1d8dfdf96e4dbdde8db96daebd9dba29ce2eab1d8e8a59cddeab1969ce2eab1d8e8a59cddeab1969cbfd9dfe8d9b1e296ecdbdadb96d7f0dfa2969cdfd9dfe8d9b1e296ecdbdadb96e39cd7d9dfe8d9b1e4dfa29ce2eab1d8e8a59cddeab196b7e9eadcdbe296dae5e8dfe49c99aba9afb1d7a3df96ddd7ead7b1969ce2eab1d8e8a59cddeab196bbe296dfd7e8a296e6e8dfecdfe4da96dadb96e99c99a8abafb1e6ea9c99a8abafb1e39cd7d9dfe8d9b1e4dfa2969ce2eab1d8e8a59cddeab1969cbfd9dfe8d9b1df96d9d7dadb96dae8d7dd9c99a8abafb196dcd7ead7a496</span>
    <span id='m31_token_I37JN2J1zYRl' class='m31_encr_item'>plrMVlfgfEKIZgaCb7UeEn1H53GeU0FJ</span>
    <span id='m31_algorithm_I37JN2J1zYRl' class='m31_encr_item'>caesar</span>
    <!-- fallback if no javascript -->This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.<!-- /fallback --></span>
    
    <script type='text/javascript' language='JavaScript'>
    var encr_cyphertext = document.getElementById('m31_cyphertext_I37JN2J1zYRl').innerHTML;
    var encr_token      = document.getElementById('m31_token_I37JN2J1zYRl').innerHTML;
    var encr_algorithm  = document.getElementById('m31_algorithm_I37JN2J1zYRl').innerHTML;
    var encr_plaintex   = '';
    
    document.getElementById('m31_wrapper_I37JN2J1zYRl').innerHTML = 'loading...';
    switch (encr_algorithm)
    {
      case 'caesar':
        encr_plaintex = m31_CaesarDecrypt(m31_hexDecode(encr_cyphertext),m31_CaesarKeyFromToken(encr_token));
        break;
      default:
    }
    document.getElementById('m31_wrapper_I37JN2J1zYRl').innerHTML = encr_plaintex;
    </script>
    <!-- /ObfuscateMe -->
    
    
  3. HTML output:
    1430676455621467686d605931165a63626821675d6e592e2526241916323067686663625b3240493739353a1a1726292c2f464940302367686663625b32302367645562323056661423321430676455621467686d6059311657636063662e172d2d2d2d2d2d16323059613255146463596114566d14415d5c555d601439615d6259675769302359613230236764556232305666142332143056661423321435145a63676814635855681a1726292d2f14575521621464636a591a1729272b2f685d143056661423321435145a63676814575514625d575d635855681a1726292d2f201430566614233214385d621466695859146155665d141a5d575d66572f61641a1726292d2f661a1726292d2f68591a1729272b2f685d201430566614233214431464665955145a6669616355671a1726292d2f145a55681a1726292d2f2230566614233214305666142332141a1729272a2f5d145966551469625514605514641a1726292d2f665d621a1729272d2f5d14305666142332141a1729272a2f5d14611a55575d66572f6258661a1726292d2f216214686355685914575960592014305666142332143769611459143a59575d63556655141a5d575d66572f6268665914675a5d621a1729272d2f5d14305666142332141a1729272a2f5d1460696255141a5d575d66572f62686659146768596059223056661423321430566614233214385d62146961566655145a5560625d5759606366145663601a1729272d2f5d14305666142332143955146455676960141a1729272b2f5d2160141a5d575d66572f625866595564681a1726292d2f1430566614233214401a55575d66572f625b1a1726292d2f145a596659556768661a1726292d2f2014696258592162145763601a1729272d2f143056661423321440695759555a1a1726292d2f66696014551a1729272b2f68595564681a1726292d2f22305666142332143056661423321444665d6a5955141a5d575d66572f62146e5566591457696114645914611a1726292d2f665d1430566614233214461a1726292d2f67556659141a1729272b2f5d146768661a1726292d2f60695759201430566614233214445914615d1a1729272b2f571a1726292d2f6863556659605914571a1726292d2f661a1726292d2f665d14305666142332143763661a1726292d2f565d5d1462595b665914586957592030566614233214305666142332141a3d575d66572f60146a59585914556e5d20141a5d575d66572f60146a59585914611a55575d66572f625d20305666142332143567685a5960145863665d621a1729272d2f55215d145b5568552f3056662332143960145d5566201464665d6a5d625814585914671a1726292d2f64681a1726292d2f611a55575d66572f625d2014305666142332141a3d575d66572f5d1457555859145866555b1a1726292d2f145a556855221414141414 NKVVo9jbB0gEGKiGZ01ggGW0B1ZQpgLC caesar This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.

Example #5 (east-Asian characters):

If your OS does not have installed a font with East-Asian characters (in this case Japanese), you will see scrambled text (mojibake) both in source and output.

  1. Joomla code:
      {obfuscate}
      <p>A haiku by Matsuo Bashō:<p>
      <p>古池や 蛙飛込む 水の音</p>
      <p>furuike ya kawazu tobikomu mizu no oto</p>
      <p>old pond... a frog leaps inwater’s sound</p>
      {/obfuscate}
      
  2. Generated HTML source:
    <!-- ObfuscateMe -->
    <span id='m31_wrapper_rhoQOAQ3Og' class='m31_encr_wrapper'>
    <span id='m31_cyphertext_rhoQOAQ3Og' class='m31_encr_item'>07043b1a625b63656f1a5c731a475b6e6d6f691a3c5b6d62201d2d2d2d35340704201d2c2b2e313035201d2c31312e2e35201d2b2c2e2c2a35201d2b2c2c323235201d2d2e2f2c2b35201d2d332b2d2b35201d2d3031333035201d2b2c2e2b3035201d2b2c2c323235201d2c31312a2a35201d2b2c2d333235201d2d32323333350704606f6c6f63655f1a735b1a655b715b746f1a6e695c636569676f1a6763746f1a68691a696e69070469665e1a6a69685e2828281a5b1a606c69611a665f5b6a6d1a6368715b6e5f6c206c6d6b6f69356d1a6d696f685e07</span>
    <span id='m31_token_rhoQOAQ3Og' class='m31_encr_item'>6wx6ycnD8nPALq1AB10tp0ICBjGZOeg</span>
    <span id='m31_algorithm_rhoQOAQ3Og' class='m31_encr_item'>caesar</span>
    <!-- fallback if no javascript -->This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.<!-- /fallback --></span>
    
    <script type='text/javascript' language='JavaScript'>
    var encr_cyphertext = document.getElementById('m31_cyphertext_rhoQOAQ3Og').innerHTML;
    var encr_token      = document.getElementById('m31_token_rhoQOAQ3Og').innerHTML;
    var encr_algorithm  = document.getElementById('m31_algorithm_rhoQOAQ3Og').innerHTML;
    var encr_plaintex   = '';
    
    document.getElementById('m31_wrapper_rhoQOAQ3Og').innerHTML = 'loading...';
    switch (encr_algorithm)
    {
      case 'caesar':
        encr_plaintex = m31_CaesarDecrypt(m31_hexDecode(encr_cyphertext),m31_CaesarKeyFromToken(encr_token));
        break;
      default:
    }
    document.getElementById('m31_wrapper_rhoQOAQ3Og').innerHTML = encr_plaintex;
    </script>
    <!-- /ObfuscateMe -->
    
    
  3. HTML output:
    e4e113471518f73f3840424cf73950f724384b4a4c46f719384a3ffdfa0a0a0a121113064715e4e1134715fdfa09080b0e0d12fdfa090e0e0b0b12fdfa08090b090712fdfa0809090f0f12fdfa0a0b0c090812fdfa0a10080a0812fdfa0a0d0e100d12fdfa08090b080d12fdfa0809090f0f12fdfa090e0e070712fdfa08090a100f12fdfa0a0f0f10101213064715e4e11347153d4c494c40423cf75038f742384e38514cf74b4639404246444cf74440514cf74546f7464b4613064715e4e113471546433bf74746453b050505f738f73d49463ef7433c38474af740454e384b3c49fd494a484c46124af74a464c453b13064715e4e1 ViuhjuZXvsk5a0ezfJIF5aTe4pzzKfiq caesar This page part is protected against spam bots and web crawlers. In order to be displayed you need to enable Javascript in your browser, and then reload the page.

Download


License

Copyright © 2010 Adrian Cozma, http://pte.ro. All rights reserved.

Released under GPL 2.0.

Full license text at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.