per configuare varie parti di un sito, ricorro spesso a file xml e classi serializzabili, tutto questo non è un toccasana per la sicurezza specialmente se i file xml contengono informazioni sensibili, come ad esempio la stringa di connessione al database.
fin da subito mi sono posto (propio subito subito no ;)) il problema di come, non dico impedire, ma perlomeno rendere più difficile l'accesso a queste risorse.
la risposta è stata crittografare il file xml :) e tenicamente la soluzione lo trovata sulla Knowledge Base
http://support.microsoft.com/default.aspx?scid=kb;it;307010
ho apportato veramente poche modifiche, strasformando l'applizazione console in una "semplice" classe, lo dotata di due costruttori uno che richiama il metodo privato per crittare e l'altro che richiama il metodo per decrittare, infine una propieta pubblica che mi restituisce uno stream (il risulatato della decrittazione non lo salvo su disco) che viene usato per deserializzarlo in un oggetto.
ecco il codice del tutto simile a quello della Knowledge Base apparte le leggere modifice apportate:
using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Text;
namespace Soluzioni4D.WebModules.EncryptDecrypt
{
/// <summary>
/// Summary description for Class1.
/// </summary>
public sealed class EncryptDecryptFile
{
//Must be 64 bits, 8 bytes.
private const string sSecretKey = "Password";
Stream streamOutput;
public EncryptDecryptFile(string sInputFilename)
{
streamOutput = DecryptFile(sInputFilename, sSecretKey);
}
public EncryptDecryptFile(string sInputFilename, string sOutputFilename)
{
EncryptFile(sInputFilename,sOutputFilename,sSecretKey);
}
private void EncryptFile(string sInputFilename,
string sOutputFilename,
string sKey)
{
FileStream fsInput = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
FileStream fsEncrypted = new FileStream(sOutputFilename,
FileMode.Create,
FileAccess.Write);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted,
desencrypt,
CryptoStreamMode.Write);
byte[] bytearrayinput = new byte[fsInput.Length];
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
}
private Stream DecryptFile(string sInputFilename,string sKey)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
//A 64 bit key and IV is required for this provider.
//Set secret key For DES algorithm.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
//Set initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
//Create a file stream to read the encrypted file back.
FileStream fsread = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
//Create a DES decryptor from the DES instance.
ICryptoTransform desdecrypt = DES.CreateDecryptor();
//Create crypto stream set to read and do a
//DES decryption transform on incoming bytes.
CryptoStream cryptostreamDecr = new CryptoStream(fsread,
desdecrypt,
CryptoStreamMode.Read);
return cryptostreamDecr;
}
public Stream StreamOutput
{
get{return streamOutput;}
}
}
}
il cammino per la sicurezza non di conclude di certo quà :) adesso tocca alla classe essere resa sicura, sarà di sicuro argomento di una prossima bloggata :)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Modificare il controllo TreeView, il 2 dicembre 2008 alle 19:27
- Perfezioniamo il ProfileDataSorce, il 13 ottobre 2008 alle 11:14
- Un DataSource per il Profile, il 10 ottobre 2008 alle 15:06
- TrueSpace 7 gratuito, il 24 luglio 2008 alle 10:59
- adesso dico la mia sull'Iphone, il 22 luglio 2008 alle 10:33
- Come tutto ebbe inizio, il 21 luglio 2008 alle 09:22