HyperLink


Bejelentkezés
E-mail: 
Jelszó: 






Skip Navigation Links
 

String titkosítása, visszafejtése


Példaprogram letöltése

6603 bájt

A .NET Framework-ben számtalan titkosítási algoritmust találunk, melyhez számos osztály tartozik. Ezeket felhasználva könnyen titkosíthatunk állományokat, stream-eket, viszont nem találunk olyan függvényt, mely egy egyszerű sztringet titkosítana és az eredményt szintén sztringként adná vissza.

Készítünk tehát két függvényt, melyek unicode típusú sztringek titkosítására, visszafejtésére alkalmas. Az egyik Encrypt néven, a másik Decrypt néven kerül létrehozásra. Az Encrypt titkosítja a paraméterként átadott sztringet, míg a Decrypt visszafejti azt. A titkosításhoz a TripleDES nevű algoritmust használjuk fel, melyhez a TripleDESCryptoServiceProvider osztályra lesz szükségünk.
  Private Shared csp As TripleDESCryptoServiceProvider
Az osztályunk konstruktorában hozzuk létre ezt az osztályt, és adjuk meg a kódoláshoz, dekódoláshoz szükséges kulcsokat. A key, illetve az iv tömbben megadott értékek ránk vannak bízva, ezek tetszőlegesek lehetnek. A szöveg visszafejtéséhez ezekre az értékekre van szükség.
  Shared Sub New()
    csp = New TripleDESCryptoServiceProvider()
    Dim key As Byte() = {2, 55, 86, 23, 2, 21, 111, 132, 222, 182, 72, 132, 12, 3, 231, 12}
    Dim iv As Byte() = {12, 231, 34, 242, 52, 12, 8, 21}
    csp.Key = key
    csp.IV = iv
  End Sub 'New
Nézzük, hogy miként történik a paraméterként kapott sztring titkosítása. Létrehozunk egy memória stream-et, valamint egy ICryptoTransform interfészt.
  Public Shared Function Encrypt(ByVal s As String) As String
    Dim ms As New MemoryStream()
    Dim ct As ICryptoTransform = csp.CreateEncryptor()
Szükségünk lesz egy titkosító stream-re is, melyet a CryptoStream osztály valósít meg. Ennek első paraméterébe a már létrejött memória stream-et adjuk meg, másodikként az ICryptoTransform interfészt. Végső paraméterként azt határozzuk meg, hogy írható legyen ez az adatfolyam.
    Dim cs As New CryptoStream(ms, ct, CryptoStreamMode.Write)
Kell még egy StreamWriter osztály, mellyel a titkosítandó sztringet tudjuk majd a memória stream-re írni.
    Dim sw As New StreamWriter(cs, System.Text.Encoding.Unicode)
    sw.Write(s)
    sw.Flush()
    cs.FlushFinalBlock()
Miután ezt megtörtént az adat már titkosítva van a stream-en, most már csak sztringgé kell alakítanunk. Ehhez létrehozunk egy bájtokat tartalmazó tömböt, majd a memória stream-ről kiolvassuk ide az adatokat.
    ms.Position = 0
    Dim buf(ms.Length) As Byte
    ms.Read(buf, 0, CInt(ms.Length))
Zárunk minden megnyitott stream-et.
    sw.Close()
    cs.Close()
    ms.Close()
Végül az eredmény buffert Base64 kódolású sztringként adjuk vissza, hogy az könnyen kezelhető, tárolható legyen.
    Return Convert.ToBase64String(buf)
  End Function 'Encrypt
Az Encrypt függvény által adott titkosított sztringet kell paraméterként megadnunk a Decrypt függvénynek. Ez végzi el a visszafejtést. Először is egy bájtokat tartalmazó tömböt hozunk létre a Base64 kódolású sztringből.
  Public Shared Function Decrypt(ByVal s As String) As String
    Dim buf As Byte() = Convert.FromBase64String(s)
Következik a memória stream és az ICryptoTransform interfész létrehozása mint az előbb.
    Dim ms As New MemoryStream()
    Dim ct As ICryptoTransform = csp.CreateDecryptor()
A titkosítást végző stream felhasználásával a bájt tömböt a stream-re írjuk és ezzel elvégezzük a visszafejtést.
    Dim cs As New CryptoStream(ms, ct, CryptoStreamMode.Write)
    cs.Write(buf, 0, buf.Length)
    cs.FlushFinalBlock()
Az eredmény kiolvasásához egy StreamReader osztályt használunk fel, melynek ReadToEnd függvényét alkalmazva egy lépésben megkapjuk a visszafejtett sztringet.
    ms.Position = 0
    Dim sr As New StreamReader(ms, System.Text.Encoding.Unicode)
    Dim result As String = sr.ReadToEnd()
Végül már csak zárni kell a stream-eket és visszaadni az eredmény sztringet.
    cs.Close()
    ms.Close()
    Return result
  End Function 'Decrypt
A két függvény felhasználása már lényegesen egyszerűbb, mint azok elkészítése. Titkosításhoz egyszerűen meghívjuk az Encrypt függvényt, átadva számára a tikosítandó szöveget.
  Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
    label1.Text = Util.Encrypt(textBox1.Text)
  End Sub 'button1_Click
A titkosított sztringet visszafejthetjük a Decrypt függvény hívásával.
  Private Sub button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button2.Click
    label2.Text = Util.Decrypt(Util.Encrypt(textBox1.Text))
  End Sub 'button2_Click

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2010 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |