In questa paginaObiettiviIl modulo consente di: | • | Memorizzare nel Registro di sistema una stringa crittografata di connessione al database. | | • | Leggere una stringa crittografata di connessione al database nel Registro di sistema e decrittografarla. |
Ambito di applicazioneLe informazioni contenute in questo modulo sono valide per i seguenti prodotti e tecnologie: | • | Sistema operativo Microsoft Windows XP o Windows 2000 Server con Service Pack 3 e versioni successive | | • | Microsoft .NET Framework versione 1.0 con Service Pack 2 e versioni successive | | • | Microsoft Visual C#® .NET |
Utilizzo del moduloPer trarre il massimo vantaggio dal modulo: | • | È necessario aver acquisito esperienza nella programmazione con Visual C# .NET. | | • | È necessario aver acquisito esperienza nell'utilizzo dell'ambiente di sviluppo Microsoft Visual Studio® .NET. | | • | È necessario aver acquisito esperienza nello sviluppo di applicazioni Web mediante l'utilizzo di ASP.NET. | | • | Creare la libreria di crittografia generica descritta in "Procedura - Creazione di una libreria di crittografia". Questa libreria fornisce la funzionalità utilizzata in questo modulo per crittografare e decrittografare la stringa di connessione al database. | | • | Leggere "Archiviazione protetta delle stringhe di connessione al database" nel modulo 12 "Protezione dell'accesso ai dati". Vi sono incluse informazioni sulle tecniche di archiviazione in modalità protetta delle stringhe di connessione al database. |
RiepilogoLa memorizzazione in modalità protetta delle stringhe di connessione al database è un problema comune che qualsiasi sviluppatore deve affrontare nello scrivere applicazioni che necessitano dell'accesso a un database. Il Registro di sistema costituisce una possibile soluzione di memorizzazione. Tuttavia, sebbene sia possibile proteggere singole chiavi del Registro di sistema con gli elenchi di controllo dell'accesso (ACL) di Microsoft® Windows®, per assicurare una maggiore protezione è consigliabile memorizzare le stringhe di connessione solo dopo averle crittografate. In questo modulo viene descritto come memorizzare una stringa crittografata di connessione al database nel Registro di sistema e come recuperarla da un'applicazione Web ASP.NET. Viene utilizzata la libreria di crittografia generica creata in "Procedura - Creazione di una libreria di crittografia". Conoscenze necessariePrima di utilizzare questo modulo, tenere presente quanto segue: | • | La stringa di connessione, il vettore di inizializzazione e la chiave utilizzati per la crittografia verranno memorizzati nel Registro di sistema come valori denominati sotto la seguente chiave di registro:
HKEY_LOCAL_MACHINE\Software\TestApplication
| | • | Per consentire la decrittografia della stringa di connessione, è necessario memorizzare il vettore di inizializzazione e la chiave. |
Memorizzazione di dati crittografati nel Registro di sistemaQuesta procedura consente di creare un'applicazione per Windows che verrà utilizzata per crittografare una stringa di connessione di esempio e memorizzarla nel Registro di sistema. | • | Per memorizzare i dati crittografati nel Registro di sistema 1. | Avviare Visual Studio .NET e creare un nuovo progetto per Windows in Visual C# denominato EncryptionTestApp. | 2. | Aggiungere un riferimento all'assembly nell'assembly Encryption.dll. Per creare questo assembly, è necessario eseguire le operazioni descritte nella sezione "Procedura - Creazione di una libreria di crittografia" di questa guida. | 3. | Aggiungere le seguenti istruzioni using all'inizio di Form1.cs, sotto le istruzioni using esistenti.
using Encryption;
using System.Text;
using Microsoft.Win32;
| 4. | Aggiungere a Form1 i controlli elencati nella tabella 1 e disporli come illustrato nella figura 1. Tabella 1: controlli di EncryptionTestApp Etichetta | Stringa di connessione: | | Casella di testo | | txtConnectionString | Etichetta | Chiave: | | Casella di testo | | txtKey | Etichetta | Vettore di inizializzazione: | | Casella di testo | | txtInitializationVector | Etichetta | Stringa crittografata: | | Casella di testo | | txtEncryptedString | Etichetta | Stringa decrittografata: | | Casella di testo | | txtDecryptedString | Pulsante | Crittografa | btnEncrypt | Pulsante | Decrittografa | btnDecrypt | Pulsante | Scrivi dati nel Registro | btnWriteRegistryData |
 Figura 1 Finestra di dialogo Applicazione di prova della crittografia | 5. | Impostare la proprietà Text di txtConnectionString su
"Server=local; database=pubs; uid=Bob; pwd=Password"
| 6. | Impostare la proprietà Text di txtKey su
"0123456789012345"
La lunghezza della chiave è 16 byte, in modo che venga supportata dall'algoritmo di crittografia Triple DES. | 7. | Impostare la proprietà Text di Form1 su
"Encryption Test Harness"
| 8. | Fare doppio clic sul pulsante Encrypt per creare un gestore eventi ButtonClick e aggiungere a quest'ultimo il seguente codice:
try
{
// Create the encryptor object, specifying 3DES as the
// encryption algorithm
Encryptor enc = new Encryptor(EncryptionAlgorithm.TripleDes);
// Get the connection string as a byte array
byte[] plainText = Encoding.ASCII.GetBytes(txtConnectionString.Text);
byte[] key = Encoding.ASCII.GetBytes(txtKey.Text);
// Perform the encryption
byte[] cipherText = enc.Encrypt(plainText, key);
// Store the intialization vector, as this will be required
// for decryption
txtInitializationVector.Text = Encoding.ASCII.GetString(enc.IV);
// Display the encrypted string
txtEncryptedString.Text = Convert.ToBase64String(cipherText);
}
catch(Exception ex)
{
MessageBox.Show("Exception encrypting: " + ex.Message,
"Encryption Test Harness");
}
| 9. | Tornare a Form1 in modalità progettazione e fare doppio clic sul pulsante Decrittografa per creare un gestore eventi ButtonClick. | 10. | Aggiungere il codice riportato di seguito al gestore eventi del pulsante Decrittografa .
try
{
// Set up the Decryptor object
Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes);
// Set the Initialization Vector
dec.IV = Encoding.ASCII.GetBytes(txtInitializationVector.Text);
byte[] key = Encoding.ASCII.GetBytes(txtKey.Text);
// Perform the decryption
byte[] plainText = dec.Decrypt(Convert.FromBase64String(
txtEncryptedString.Text),
key);
// Display the decrypted string.
txtDecryptedString.Text = Encoding.ASCII.GetString(plainText);
}
catch(Exception ex)
{
MessageBox.Show("Exception decrypting. " + ex.Message,
"Encryption Test Harness");
}
| 11. | Tornare a Form1 in modalità progettazione e fare doppio clic sul pulsante Scrivi dati nel Registro per creare un gestore eventi ButtonClick. | 12. | Aggiungere al gestore eventi il seguente codice:
// Create registry key and named values
RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software",true);
rk = rk.CreateSubKey("TestApplication");
// Write encrypted string, initialization vector and key to the registry
rk.SetValue("connectionString",txtEncryptedString.Text);
rk.SetValue("initVector",Convert.ToBase64String(
Encoding.ASCII.GetBytes(txtInitializationVector.Text)));
rk.SetValue("key",Convert.ToBase64String(Encoding.ASCII.GetBytes(
txtKey.Text)));
MessageBox.Show("The data has been successfully written to the registry");
| 13. | Eseguire l'applicazione, quindi scegliere Encrypt. La stringa crittografata di connessione viene visualizzata nel campo Stringa crittografata. | 14. | Scegliere Decrittografa. La stringa originale viene visualizzata nel campo Stringa decrittografata. | 15. | Scegliere Scrivi dati nel Registro. | 16. | Nella finestra di messaggio scegliere OK. | 17. | Eseguire regedit.exe e visualizzare il contenuto della seguente chiave:
HKLM\Software\TestApplication
Verificare che siano presenti i valori codificati per i valori denominati connectionString, initVector e key. | 18. | Chiudere regedit.exe e l'applicazione di prova. |
|
Creazione di un'applicazione Web ASP.NETQuesta procedura consente di sviluppare una semplice applicazione Web ASP.NET che recupererà la stringa crittografata di connessione dal Registro di sistema e la decrittograferà. | • | Per creare un'applicazione ASP.NET 1. | Creare una nuova applicazione Web ASP.NET Visual C# denominata EncryptionWebApp. | 2. | Aggiungere un riferimento all'assembly nell'assembly Encryption.dll. Per creare questo assembly, è necessario eseguire le operazioni descritte nella sezione "Procedura - Creazione di una libreria di crittografia" di questa guida. | 3. | Aprire Webform1.aspx.cs e aggiungere le istruzioni using riportate di seguito all'inizio del file, sotto le istruzioni using esistenti.
using Encryption;
using System.Text;
using Microsoft.Win32;
| 4. | Aggiungere a WebForm1.aspx i controlli elencati nella tabella 2. Tabella 2: controlli di WebForm1.aspx Etichetta | | lblEncryptedString | Etichetta | | lblDecryptedString | Pulsante | Ottieni stringa di connessione | btnGetConnectionString |
| 5. | Fare doppio clic sul pulsante Ottieni stringa di connessione per creare un gestore eventi ButtonClick. | 6. | Aggiungere al gestore eventi il seguente codice:
RegistryKey rk = Registry.LocalMachine.OpenSubKey(
@"Software\TestApplication",false);
lblEncryptedString.Text = (string)rk.GetValue("connectionString");
string initVector = (string)rk.GetValue("initVector");
string strKey = (string)rk.GetValue("key");
Decryptor dec = new Decryptor(EncryptionAlgorithm.TripleDes );
dec.IV = Convert.FromBase64String(initVector);
// Decrypt the string
byte[] plainText = dec.Decrypt(Convert.FromBase64String(
lblEncryptedString.Text),
Convert.FromBase64String(strKey));
lblDecryptedString.Text = Encoding.ASCII.GetString(plainText);
| 7. | Scegliere Genera soluzione dal menu Genera. | 8. | In Esplora soluzioni fare clic con il pulsante destro del mouse su Webform1.aspx, quindi scegliere Visualizza nel browser. | 9. | Scegliere Ottieni stringa di connessione. Le stringhe di connessione crittografate e decrittografate vengono visualizzate nel modulo Web. |
|
Altre risorsePer ulteriori informazioni, vedere "Procedura - Creazione di una libreria di crittografia" in questa guida.
| |