- Criptare dati attraverso un algoritmo simmetrico - |
|||
COSA SERVE PER QUESTO TUTORIAL | |||
Download | Chiedi sul FORUM | Glossario | conoscenza dell'HTML - un web server che supporti la tecnologia ASP .NET | ||
Come crittogafare e decrittografare dati con DES in Asp.Net | |||
CIFRATURA Crittografare con DES.
Criptare dati è un'esigenza abbastanza comune, anche su web. Il
Framowork .Net mette a disposizione lo spazio di nomi
System.Security.Cryptography a questo proposito; in questo articolo ci
occuperemo in particolare degli algoritmi simmetrici, ovvero di quelli
che derivano dalla classe System.Security.Cryptography.SymmetricAlgorithm.
Nell'esempio proposto
viene utilizzato DES (ritenuto uno degli algoritmi più sicuri
attualmente in circolazione) ma si tenga presente che ogni qual volta
nel codice appare DES è possibile sostituirlo con classi derivanti da SymmetricAlgorithm (come
Rijndael, TripleDes). <%@ Page Language="VB" debug="true" %> <%@ import Namespace="System.Security.Cryptography" %> <%@ import Namespace="System.Text.Encoding" %> <script language="VB" runat="server"> Sub Page_Load(ByVal sender As Object, e As System.EventArgs) Dim bytIV As Byte() = {12, 89, 148, 62, 0, 78, 254, 129} Response.Write("IV: { " & ByteArrayString(bytIV) & "}<br>") Dim bytKey As Byte() = {122, 56, 201, 34, 100, 22, 200, 103} Response.Write("Key: { " & ByteArrayString(bytKey) & "}<br>") Si noti che ByteArrayString è una semplice funzione definita come segue per stampare la lista dei byte contenuti nell'array: Function ByteArrayString(ByVal byt As Byte()) Dim C1 As Integer, str As String = "" For C1 = 0 To byt.Length - 1 str = str & IIf(byt(C1) < 16, "0", "") & Hex(byt(C1)) & " " Next C1 Return str End Function Di seguito richiamiamo Crypt e Decrypt (le due funzioni che come ovvio rispettivamente criptano una stringa e decriptano un array di byte) e stampiamo i risultati che forniscono. Dim strInput As String If Request("str") Is Nothing Then strInput = "ArcadiA Club" Else strInput = Request("str") Response.Write("Testo originale: """ & strInput & """<br>") 'Criptiamo Dim bytEncrypted As Byte() = Crypt(strInput, bytIV, bytKey) Response.Write("Byte criptati: { " & ByteArrayString(bytEncrypted) & "}<br>") 'Decriptiamo Dim strDecrypted As String = Decrypt(bytEncrypted, bytIV, bytKey) Response.Write("Testo originale: """ & strDecrypted & """<br>") End Sub Vediamo ora in dettaglio le due funzioni chiave. Function Crypt(ByVal str As String, ByVal bytIV As Byte(), ByVal bytKey As Byte()) As Byte() Dim algDES As DES = DES.Create Dim desEncryptor As ICryptoTransform = algDES.CreateEncryptor(bytIV, bytKey) La funzione Crypt istanzia la classe System.Security.Cryptography.DES
attraverso il metodo Create, e dall'oggetto creato si ottiene,
attraverso CreateEncryptor (funzione a cui si passa le due chiavi generate),
un ICryptoTransform che mette a disposizione i metodi per effettuare la
criptazione. Dim bytInput() As Byte, bytOutput() As Byte bytInput = UTF8.GetBytes(str) bytOutput = desEncryptor.TransformFinalBlock(bytInput, 0, bytInput.Length) Return bytOutput End Function La funzione Decrypt è esattamente la stessa cosa, se non per il fatto che non viene utilizzata la funzione algDES.CreateEncryptor ma algDES.CreateDecryptor e bytInput (l'array di input) viene passato direttamente alla funzione e non è dunque necessario effettuare la trasformazione da stringa ad array di byte; è però necessario che l'array di output venga restituito come stringa attraverso la codifica UTF8. Function Decrypt(ByVal bytInput As Byte(), ByVal bytIV As Byte(), ByVal bytKey As Byte()) As String Dim algDES As DES = DES.Create Dim desDecryptor As ICryptoTransform = algDES.CreateDecryptor(bytIV, bytKey) Dim bytOutput() As Byte bytOutput = desDecryptor.TransformFinalBlock(bytInput, 0, bytInput.Length) Return UTF8.GetString(bytOutput) End Function Chiudiamo infine lo script e mettiamo un semplice form che permette di specificare il testo da criptare e da decriptare. </script> <form action="des.aspx"> <input type="text" value="Testo da criptare" name="str"> <input type="submit" value="Cripta"> </form>
|
|||
<< INDIETRO | by VeNoM00 |