Spesso durante lo sviluppo delle nostre applicazioni ci troviamo a doverci scontrare con problemi legati alla sicurezza.
Uno su tutti è la necessità di dover nascondere in qualche modo le informazioni sensibili.
Il .NET Framework mette a disposizione una serie di classi dedicate alla crittazione dei dati. Di seguito riportiamo una classe che permette di criptare e decriptare una stringa utilizzando l'algoritmo di Rijndael a chiave simmetrica:
using System; using System.Security.Cryptography; using System.Text; using System.IO; public class DataCrypter { private static byte[] keyb; private static byte[] ivb = {10,61,25,12,122,120,80,248, 13,182,196,212,176,46,23,85}; // la chiave è nel web.config public static String keyFile = System.Configuration.ConfigurationSettings.AppSettings["KeyFile"]; private static byte[] LoadKey() { Byte[] key = new Byte[32]; StreamReader sr; sr = File.OpenText(keyFile); for (int i=0;i<32;i++) { String str = sr.ReadLine(); key<i> = Byte.Parse(str); } return key; } // cripta la stringa public static string EncryptString(string src) { keyb = LoadKey(); byte[] p = Encoding.ASCII.GetBytes(src.ToCharArray()); byte[] encodedBytes = {}; MemoryStream ms = new MemoryStream(); RijndaelManaged rv = new RijndaelManaged(); CryptoStream cs = new CryptoStream(ms, rv.CreateEncryptor(keyb,ivb), CryptoStreamMode.Write); try { cs.Write(p, 0, p.Length); cs.FlushFinalBlock(); encodedBytes = ms.ToArray(); } finally { ms.Close(); cs.Close(); } return Convert.ToBase64String(encodedBytes); } // descripta public static string DecryptString(string src) { if (src != String.Empty) { keyb = LoadKey(); byte[] p = Convert.FromBase64String(src); byte[] initialText = new Byte[p.Length]; RijndaelManaged rv = new RijndaelManaged(); MemoryStream ms = new MemoryStream(p); CryptoStream cs = new CryptoStream(ms, rv.CreateDecryptor(keyb, ivb), CryptoStreamMode.Read); try { cs.Read(initialText, 0, initialText.Length); } finally { ms.Close(); cs.Close(); } StringBuilder sb = new StringBuilder(); for(int i=0;i < initialText.Length;++i) { sb.Append((char)initialText<i>); } return sb.ToString(); } return src; } public DataCrypter() {} }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.