Zakódování zdrojového kódu HTML stránky

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Stoyan
Datum: 29.7.2006
Hodnocení/Hlasovalo: 3/5

Říkáte si, že je to nemožné? HTML se přece šifrovat nemůže, protože pak by se stalo pro prohlížeč nečitelné, že ano? Ale napadl mě velmi jednoduchý způsob, jak toho přece jen docílit.

Říkáte si, že je to nemožné? HTML se přece šifrovat nemůže, protože pak by se stalo pro prohlížeč nečitelné, že ano? Ale napadl mě velmi jednoduchý způsob, jak toho přece jen docílit. Zdrojový kód bude šifrovaný, čili ho hned jen tak nějaká lama neokopíruje, ale přesto zůstane pro prohlížeč čitelný. Jak tedy na to?

Nejdříve se vysvětlíme princip, jak to vlastne bude fungovat. Jak už jsem říkal, je to velmi jednoduché. Vezmeme si soubor se zdrojovým kódem stránky (HTML), postupně čteme každý znak, ten převedeme do hexadecimální soustavy a uložíme do druhého souboru. Teď tedy máme v souboru kompletní zdroják převedený do šestnáctkové soustavy. Ten však pro prohlížeč čitelný není. K jeho přečtení nám poslouží JavaScript, konkrétně funkce unescape, která hexadecimální znaky převede zpět do ascii, což umožní prohlížeči zdrojový kód přečíst.

Teď se tedy vrhněme do realizace. Způsobů jak text převést do hexadecimální soustavy je více. Já jsem si naprogramoval jednoduchý prográmek v "céčku", který čte postupně všechny znaky ze souboru vstup.html a přepisuje je v hexadecimální podobě do souboru vystup.txt, do kterého přidá i již zmíněnou funkci unescape. Výsledný soubor vystup.html tedy navenek vypadá naprosto stejně jako původní vstup.html, ale podívejte se na zdrojový kód. Celkem rozdíl co?:)

Tady uvedu příklad. Soubor vstup.txt obsahoval tento jednoduchý html kód:

<h1 style="red">Nadpis</h1>
<p>Odstavec, bla bla bla ...</p>

A tady je zdroják výsledného souboru vystup.html:

<script language="JavaScript">
document.write(unescape("\x3c\x68\x31\x20\x73\x74\x79\x6c\x65\x3d\x22 \x63\x6f\x6c\x6f\x72\x3a\x72\x65\x64\x22\x3e\x4e\x61\x64\x70\x69\x73 \x3c\x2f\x68\x31\x3e\x0d\x0a\x3c\x70\x3e\x4f\x64\x73\x74\x61\x76\x65 \x63\x2c\x20 \x62\x6c\x61\x20\x62\x6c\x61\x20\x62\x6c\x61\x20\x2e \x2e\x2e\x3c\x2f\x70\x3e"))</script>
<noscript>Pro správné zobrazení této stránky si prosím povolte JavaSript ve svém prohlížeči!</noscript>

Zde ještě přidávám zdrojový kód programu na zašifrování zdrojáku. Program je psaný v jazyce C/C++ a myslím, že je snadno pochopitelný.

/*
* HTML Source Coder v1.00
* ---------------------------------------------------
* Programam "zasifruje" HTML kod
* ---------------------------------------------------
* Autor: Stoyan (stoyan@tiscali.cz)
* ---------------------------------------------------
* Datum: 29.7.2006
*/

#include <stdio.h>
#define HLAVICKA "+-----------------------------------+\n| HTML Source Coder v1.00 by Stoyan |\n+-----------------------------------+\n\n"

main()
{
  FILE *vstup, *vystup;
  int c;

  if ((vstup = fopen("vstup.html", "r")) == NULL) {
     printf("%s", HLAVICKA);
     printf("Soubor vstup.html se nepodarilo otevrit!\n");
     printf("Ujistite se, ze se soubor nachazi ve slozce s programem.\n\n");
     printf("Stiskni ENTER pro ukonceni...\n");
     getchar();
     return 1;
  }

  vystup = fopen("vystup.html", "w");   //otevreni souboru vystup.html pro zapis

  fprintf(vystup, "<script language=\"JavaScript\" type=\"text/javascript\">\n");
  fprintf(vystup, "document.write(unescape(\"");

  while ((c = getc(vstup)) != EOF) {   //cte znaky ze souboru vstup.txt dokud nedosahne konce souboru (EOF)
     if (c==10) fprintf(vystup, "\\x0d\\x0a",c);   //new line
     else fprintf(vystup, "\\x%x",c);   //prevod do hexadecimalni soustavy
  }

  fprintf(vystup, "\"))");
  fprintf(vystup, "</script>");
  fprintf(vystup, "<noscript>Pro správné zobrazení této stránky si prosím povolte JavaSript ve svém prohlížeči!</noscript>");

  fclose(vstup);   //zavreni souboru vstup.html
  fclose(vystup);   //zavreni souboru vvystup.html

  printf("%s", HLAVICKA);
  printf("Soubor vstup.html byl uspesne zasifrovan do souboru vystup.html!\n\n");
  printf("Stiskni ENTER pro ukonceni...\n");
  getchar();
  return 0;
}

Již hotový program si máte možnost stáhnout zde.

Originál článku naleznete na Stoyan's Page.

Poznámka: V průběhu testování jsem narazil na jeden bug a to, že české znaky (konkrétně "ě","š","č","ř","ž") se v zakódovavé verzi zdrojového kódu nesprávně zobrazují. Pokud by měl někdo řešení, byl bych velmi vděčný, kdyby se mi ozval na mail nebo ICQ.


[ Stoyan ]