reklama

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: Programování, Bezpečnost, Š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...
reklama
Určitě si přečtěte

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

** Herní hardware se od toho běžného často liší jen vzhledem ** Při výběru stále nezapomínejte na základní parametry ** Poradíme jak vybrat herní hardware i periferie

20.  2.  2017 | Stanislav Janů | 36

10 nejhorších produktů v historii Microsoftu

10 nejhorších produktů v historii Microsoftu

20.  2.  2017 | Karel Javůrek | 141

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

** AMD uvedlo první tři procesory Ryzen 7 ** Všechny budou pracovat s osmi jádry a šestnácti vlákny ** Na pulty obchodů se dostanou už za týden

22.  2.  2017 | Stanislav Janů | 132

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

** Každý bastlíř se po čase neobjede bez armády švábů ** Dnes si některé z nich vyzkoušíme ** Třeba zázračný posuvný registr

19.  2.  2017 | Jakub Čížek | 40

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

** Evropští úředníci chtějí, aby byly Desítky transparentnější ** Microsoft od jara skutečně chystá změny ** Ochráncům soukromí to ale nestačí

21.  2.  2017 | Jakub Čížek | 218

Remix Singularity: Microsoft si na tom vylámal zuby. Jak dopadne Android?

Remix Singularity: Microsoft si na tom vylámal zuby. Jak dopadne Android?

** Microsoft do svých telefonů integroval desktopové prostředí ** Moc to ale nevyšlo, chyběl pořádný výkon ** Teď to zkoušejí ex-googleři s Remix Singularity

23.  2.  2017 | Jakub Čížek | 74


Aktuální číslo časopisu Computer

Supertéma o počítačové bezpečnosti

AMD Ryzen přichází

Velké testy kinoprojektorů a levných špuntových sluchátek

Příslušenství do USB-C

reklama
reklama