Funksioni hash

## Hash Algoritmet
**Hash Algoritmet - Hyrje**

Qëllimi i kriptimit të të dhënave është të mbrojë informatën që ajo mos të lexohet nga personat të cilëve nuk ju dedikohet,mirëpo kjo nuk mund t'i ndaloj shfrytëzuesit "malicious" që ta nryshojnë atë.Kështu për shembull,të marrim rastin kur dërgojmë një email përmes inernetit.Nëse e përdorim kriptimin,pranuesi i këti emaili është relativisht i sigurtë se askush tjetër nuk e ka lexuar mesazhin që përmban ai email.Mirëpo,marrësi kurrsesi nuk duhet të jetë i sigurtë se mesazhi i pranuar është i ngjashëm me mesazhin origjinal të cilin e kemi dërguar.Ai mund të jetë i ndryshuar gjatë rrugës.
Për ta luftuar këtë na nevoitet një procedurë e shkurtër dhe mjaftueshëm efikase që të verifikojmë integritetin(e në disa raste edhe origjinalitetin) e mesazhit.
Ky rol në kriptografi i është dhënë hash kodit.Hash kodi na mundëson të verifikojmë që të dhënat kanë mbetur të pandryshuara,përderisa kriptimi bën që të dhënat të jenë të palexuara nga përgjuesit.

### Funksionimi i Hash Algoritmeve
Hash algoritmet marrin një sasi arbitrare të të dhënave(si një bllok i madh i informatave binare) dhe i shfrytëzon ato që të gjenerojë një hash kod të shkurtër i cili efektivisht është unik për atë informatë.
Të gjitha hash algoritmet për kriptim duhet të jenë:
***One-way(Njëkahore)**-që nënkupton se është tërësisht e pamundur që të rikrijohet dokumenti nga hashi,për arsye se hashi nuk i përfshinë të gjitha informatat që janë në dokument.
***Collision resistant**-që nënkupton se dy dokumente të ndryshme kanë hashe të ndryshme.

### .NET Klasët për Hash
Të gjitha hash algoritmet të përkrahura.NET trashëgohen nga klasa abstrakte HashAlgorithm.Të gjitha hash algoritmet përdorin ose SHA(secure Hash Algorithm) ose MD5(Message Digest 5).
Klasa abstrakte HashAlgorithm definon anëtarët që përkrahen nga algoritmet e klasëve konkrete.Klasa abstrakte KeyedHashedAlgorithm derivohet nga HashAlgorithm dhe shton vetin Key. 
HashAlgorithm oforn metodën Create() e cila gjeneron implementimin e klasës së nënkuptuar.Klasa HashAlgorithm gjithashtu definon metodën Clear(),e cila fshinë nga memoria hash kodin e fundit të gjeneruar si dhe metodën ComputeHash() e cila krijon hashin për bufferin e caktuar të të dhënave.
Mund të themi se gjatësia e hashit është gjatësi fikse.Për shembull,nëse përdorim algoritmin SHA,hashi rezultues gjithmonë është 20 bajt(160 bit),pa marrë parasysh madhësinë e të dhënave për të cilët llogaritet hashi.

Shembulli në vazhdim shpjegon se si llogaritet hashi për disa të dhëna.

  using System;
  using System.Security.Cryptography;
  namespace shembulliHash
  {
   class Program
   {
      static void Main(string[] args)
         {
            HashAlgorithm hash=HashAlgorithm.Create();
            Console.Write("Madhësia e hashit në bita:");
            Console.WriteLine(hash.HashSize.ToString()+"bita");
            Console.Write("Madhësia e hashit në bajta:");
            Console.Write((hash.HashSize/8).ToString()+"bajta");
            ***//Të dhënat për të cilat do ta llogarisim hashin***
            byte[] TeDhenat={20,30,15,44,62,72,81,97,00,08};
            ***//Krijimi i hashit***
            byte[] hashi=hash.ComputeHash(TeDhënat);
            ***//Shtypja e hashit***
            Console.Write("\nHashi: "+ BitConverter.ToString(hashi));
            Console.WriteLine();
            Console.Write("\nPër të përfunduar shtyp ENTER ....");
         }
   }
 }
***Shiqo edhe:***
#RSA Algoritmi
#Steganografia Digjitale
#Nenshkrimet Digjitale
#Enkriptimi Simetrik

## Referimet