Staňte se programátorem: Základy šifrování

Základem softwarové bezpečnosti je šifrování citlivých dat. Microsoft .NET Framework umí pracovat hned s několika algoritmy včetně DES, TripleDES a 256bitovým RijnDael.

Zabezpečení dat se v poslední době stává čím dál větším problémem. Programátoři vyvíjí stále složitější šifrovací algoritmy za účelem ukrytí citlivých dat. Algoritmy, jež před 30 lety byly symbolem bezpečnosti, lze v dnešní době rozluštit během několika hodin na běžném počítači.

V dnešním díle se podíváme na to, jakým způsobem kódovat text do jiné podoby a to buď jednoduchým šifrováním pomocí algoritmu, či pro vyšší bezpečnost za pomocí klíče.

Šifrování textu

Chcete-li zakódovat jednoduchý text do nečitelné podoby, poslouží vám k tomu algoritmus base64. Tento algoritmus převede řetězec do šifry složené z ASCII znaků, takže je čitelný. Nevýhodou tohoto algoritmu je navýšení velikosti zprávy, jejíž objem se zvýší přibližně o 37%.

Klepněte pro větší obrázek
Ukázka hotového programu

Nejčastějším využitím tohoto algoritmu je ukládání souborů do textového formátu XML. Implementace zašifrování textu pomocí base64 vypadá v C# takto.

if (textBox1.Text != null)
{
  // Rozloží text na bajty
  byte[] bajty = Encoding.Unicode.GetBytes(textBox1.Text);
  // Převede je na zašifrovaný řetězec pomocí base64
  textBox2.Text = Convert.ToBase64String(bajty);
}
else
{
  MessageBox.Show("Zadejte text k zašifrování!");
}

Dešifrování pak může vypadat třeba následovně.

if (textBox2.Text != null)
{
  // Převede zašifrovaný text na pole bajtů
  byte[] bajty = Convert.FromBase64String(textBox2.Text);
  // Dešifruje šifru a převede ji na text
  textBox1.Text = Encoding.Unicode.GetString(bajty);
}
else
{
  MessageBox.Show("Zadejte kód k dešifrování!");
}

Symetrické šifrování

Algoritmy symetrického šifrování fungují na principu zašifrování zprávy odesílatelem pomocí určitého klíče a její dekódování pomocí stejného klíče na původní zprávu na straně příjemce. Proto je toto šifrování nazýváno symetrickým – obě strany provádějí podobnou úlohu.

 Klepněte pro větší obrázek
Ukázka hotového programu

V prostředí .NET jsou třídy určené pro symetrické šifrování realizované třídou System.Security.Cryptography.SymetricAlgorithm. Instanci třídy vytvoříme pomocí statické tovární metody Create, která jako argument očekává název šifrovacího algoritmu.

SymmetricAlgorithm cryptoProvider = SymmetricAlgorithm.Create("TripleDes");

Přehled možných symetrických šifrovacích argumentů uvádím v této tabulce.

AlgoritmusDélka klíče (bit)Třída představující algoritmus
DES64DESCryptoServiceProvider
TripleDES128,192TripleDESCryptoServiceProvider
RC240-128RC2CryptoServiceProvider
RijnDael128, 192, 256RijnDaelManaged

Následující metoda zašifruje určitý text algoritmem TripleDES pomocí daného klíče. Jelikož TripleDes vyžaduje 128bitový klíč, musí mít8 znaků, protože řetězce jsou v C# ve znakové sadě Unicode, v rámci kterého má každý znak 2 bajty; pak platí rovnice  2*8*8 = 128 bitů.

public static string Encrypt(string originalString, string pass)
{
  if (String.IsNullOrEmpty(originalString))
  {
    throw new ArgumentNullException("Zadejte vhodný řetězec k zašifrování!");
  }
  if (pass.Length != 8) // Algoritmus TripleDES používá 128 bitový šifrovací klíč
  {
    MessageBox.Show("Heslo musí být dlouhé 8 znaků");
    return "";
  }
  // Rozloží heslo na pole bajtů, kterým budou jednotlivé bloky textu šifrovány
  byte[] bytes = ASCIIEncoding.Unicode.GetBytes(pass);
  // Vytvoří instanci třídy SymetricAlgorithm
  // představující daný symetrický šifrovací algoritmus.
  SymmetricAlgorithm cryptoProvider = SymmetricAlgorithm.Create("TripleDes");
  // Vytvoří datový proud do paměti do kterého budou ukládána výsledná data
  MemoryStream memoryStream = new MemoryStream();
  // Vytvoří šifrující datový proud k datům uchovaným v paměti
  CryptoStream cryptoStream = new CryptoStream(memoryStream,
      cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write);
  StreamWriter writer = new StreamWriter(cryptoStream);
  // Zašifruje bajty
  writer.Write(originalString);
  writer.Flush();
  cryptoStream.FlushFinalBlock();
  writer.Flush();
  // Zapíše do řetězce zašifrovaný text. Aby byl text
  // čitelný, je převeden pomocí algoritmu base64 na čitelný
  // ASCII text
  return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
}

Metoda určená pro dešifrování vypadá takto:

public static string Decrypt(string cryptedString, string pass)
{
  if (String.IsNullOrEmpty(cryptedString))
  {
    throw new ArgumentNullException("Zadejte řetězec, jež má být dekriptován!");
  }
  byte[] bytes = ASCIIEncoding.Unicode.GetBytes(pass);
  if (pass.Length != 8) // Algoritmus TripleDES používá 128 bitový šifrovací klíč
  {
    MessageBox.Show("Heslo musí být dlouhé 8 znaků");
    return "";
  }
  TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
  MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(cryptedString));
  CryptoStream cryptoStream = new CryptoStream(memoryStream,
      cryptoProvider.CreateDecryptor(bytes, bytes), CryptoStreamMode.Read);
  StreamReader reader = new StreamReader(cryptoStream);
  return reader.ReadToEnd();
}

A to je vše.  Pokud  vám předprogramované algoritmy nevyhovují, na internetu najdete zdrojové kódy i hotové třídy pro zcela nové kryptografické modely, RijnDael ale nabízí až 256bitové a tedy poměrně složité klíče. Nakonec si šifrování můžete sami vyzkoušet, ke stažení totiž opět nabízíme zdrojové kódy včetně projektu pro Visual Studio 2008 (Express Edition) a spustitelný program.


Mareš, Amadeo: 1001 tipů a triků pro C#

Klepněte pro větší obrázekNestačí vám náš seriál? Pořiďte si knihu jeho autora, ve které vás seznámí s tisícovkou programovacích tipů a technik.Díky velkému počtu tipů, návodů, triků a rad kniha poslouží při každé příležitosti. Kdykoli si nevíte rady, stačí nalistovat příslušnou stranu a problém okamžitě vyřešit. Tipy a triky míří především na začínající programátory; užitečné rady tu ovšem najdou i pokročilejší vývojáři a ostřílení znalci. SOučástí publikace je i přiložené DVD, na kterém najdete bezplatné vývojové prostředí Visual C#, databázový server a především všechny zdrojové kódy z knihy, takže je budete moci okamžitě použít.Webové stránky knihy.

Témata článku: Bezpečnost, Programování, Šifrování, Unicode, Pass, Byte, 1001

25 komentářů

Nejnovější komentáře

  • ricmat 5. 9. 2009 0:32:22
    Autor zde naprosto hrubym zpusobem zamenuje slova kodovani (kodovani textu...
  • xixo 22. 8. 2009 10:11:09
    Tohle je kurs lepení komponent k sobě, s programováním to nemá nic...
  • my_account 21. 8. 2009 14:43:36
    Lenže tento kód je napísaný vyložene blbo. Ak je zlý jeden vstup vyhodím...
Určitě si přečtěte

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

** Gary Kildall pochopil, že levné výpočetní čipy mohou posloužit jako univerzální počítače pro všechny ** Připravil pro ně proto první operační systém ** Později mu systém vyfoukl Microsoft a nazval ho MS DOS

23.  4.  2017 | Pavel Tronner | 46

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

** Legendární hra Starcraft je nyní k dispozici zdarma ** Chystá se i nová remasterovaná verze s hezčí grafikou

19.  4.  2017 | Jakub Čížek | 25

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

** Máte nápad, ale chybí vám stroje a pořádná dílna? ** Chcete postavit ptačí budku, nebo krabičku pro Arduino? ** Brno otevřelo svůj FabLab – laboratoř pro bastlíře

19.  4.  2017 | Jakub Čížek | 31

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

** Už je to tady, lidé přestávají chápat počítače ** Systémy neuronových sítí začínají pracovat tak, že ani jejich tvůrci přesně neví, co se uvnitř děje ** Do budoucna to může být závažný problém

Včera | Jakub Čížek | 88

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

** Slavný osmibitový počítač Sinclair ZX Spectrum byl uveden právě před 35 lety ** Připomeňte si tento průkopnický počítač v tematických článcích ** Podívejte se, jak funguje dnes

23.  4.  2017 | Pavel Tronner | 13

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

** Google ve svém překladači roky používal statistickou technologii ** Nyní zavádí strojové učení a neuronové sítě ** Rozdíl by měl být zvláště na větších textech patrný už nyní

20.  4.  2017 | Jakub Čížek | 31


Aktuální číslo časopisu Computer

První test AMD Ryzen

Velké testy: 22 powerbank a 8 bezdrátových setů

Radíme s koupí Wi-Fi routeru

Co dokáží inteligentní domy?