Exportar (0) Imprimir
Expandir todo

Cómo: Almacenar cadenas de conexión cifradas en el Registro

Publicado: 26 de junio de 2006

Consulte la Página de entrada como punto de partida y para obtener una descripción completa del documento Crear aplicaciones ASP.NET seguras.

Resumen: Las aplicaciones pueden almacenar los datos cifrados, como las cadenas de conexión y las credenciales de cuentas, en el Registro de Windows. En este artículo se muestra cómo almacenar y recuperar cadenas cifradas en el Registro.

El Registro representa una ubicación donde las aplicaciones pueden almacenar cadenas de conexión de base de datos. Aunque las claves del Registro se pueden proteger individualmente con listas de control de acceso (ACL) de Windows, deben almacenarse cadenas de conexión cifradas para mayor seguridad. En este artículo se describe cómo almacenar en el Registro una cadena de conexión de base de datos cifrada y recuperarla en una aplicación Web ASP.NET. Se utiliza la biblioteca de clases administradas de cifrado y descifrado creada en "Cómo: Crear una biblioteca de cifrado", que encontrará en la sección Referencia de esta guía.

Si todavía no ha creado el ensamblado de la biblioteca de clases de cifrado, hágalo antes de continuar con este artículo. Para obtener más información acerca de otras ubicaciones y formas de almacenar de manera segura cadenas de conexión de base de datos, consulte "Almacenar cadenas de conexión a bases de datos de forma segura" en el capítulo 12, "Seguridad del acceso a datos".

Nota

La cadena de conexión, el vector de inicialización y la clave que se utilizan para el cifrado se almacenarán en el Registro como valores con nombre bajo la siguiente clave.

HKEY_LOCAL_MACHINE\Software\TestApplication

El vector de inicialización y la clave deben almacenarse para que sea posible descifrar la cadena de conexión.

Requisitos

A continuación se describen las recomendaciones de hardware, software, infraestructura de red, conocimientos y Service Pack que se necesitan.
Sistema operativo Microsoft® Windows® 2000
Sistema de desarrollo Microsoft Visual Studio® .NET

Para llevar a cabo los procedimientos de este artículo, también es necesario que tenga conocimientos de la herramienta de desarrollo Microsoft Visual C#™.

En esta página

Almacenar en el Registro los datos cifrados Almacenar en el Registro los datos cifrados
Crear una aplicación Web ASP.NET Crear una aplicación Web ASP.NET
Referencias Referencias

Almacenar en el Registro los datos cifrados

En este procedimiento se crea una aplicación Windows que se utilizará para cifrar una cadena de base de datos de ejemplo y almacenarla en el Registro.

Para almacenar en el Registro los datos cifrados

  • Inicie Visual Studio .NET y cree un nuevo proyecto de Windows en C# con el nombre EncryptionTestApp.

  • Agregue una referencia de ensamblado al ensamblado Encryption.dll.
    Para crear el ensamblado, debe realizar los pasos que se describen en "Cómo: Crear una biblioteca de cifrado" en la sección Referencia de esta guía.

  • Al principio del archivo Form1.cs, agregue las siguientes instrucciones using debajo de las instrucciones using existentes.

    using Encryption; 
       using System.Text; 
       using Microsoft.Win32;
    
  • Agregue a Form1 los controles que se indican en la tabla 1 y organícelos como se indica en la ilustración 1.
    Tabla 1: Controles de EncryptionTestApp

    Control

    Texto

    Id.

    Etiqueta

    Connection String:

    .

    Cuadro de texto

    .

    txtConnectionString

    Etiqueta

    Key:

    .

    Cuadro de texto

    .

    txtKey

    Etiqueta

    Initialization Vector:

    .

    Cuadro de texto

    .

    txtInitializationVector

    Etiqueta

    Encrypted String

    .

    Cuadro de texto

    .

    txtEncryptedString

    Etiqueta

    Decrypted String

    .

    Cuadro de texto

    .

    txtDecryptedString

    Botón

    Encrypt

    btnEncrypt

    Botón

    Decrypt

    btnDecrypt

    Botón

    Write Registry Data

    btnWriteRegistryData

    imagen

    Ilustración 1
    Cuadro de diálogo de prueba de cifrado Encryption Test Harness

  • Configure la propiedad Text de txtConnectionString de la siguiente manera:

    "Server=local; database=pubs; uid=Bob; pwd=Password"
    
  • Configure la propiedad Text de txtKey de la siguiente manera:

    "0123456789012345"
    

    La clave tiene una longitud de 16 bytes para adaptarse al algoritmo de cifrado Triple DES.

  • Configure la propiedad Text de Form1 de la siguiente manera:

    "Encryption Test Harness"
    
  • Haga doble clic en el botón Encrypt (Cifrar) para crear un controlador de eventos de clic y agregue a dicho controlador el código que se indica a continuación.

    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"); 
       }
    

    Vuelva a Form1 en modo de diseño y haga doble clic en el botón Decrypt (Descifrar) para crear un controlador de eventos de clic.

  • Agregue el siguiente código al controlador de eventos del botón Decrypt.

    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"); 
       }
    
  • Vuelva a Form1 en modo de diseño y haga doble clic en el botón Write Registry Data (Escribir datos en el Registro) para crear un controlador de eventos de clic.

  • Agregue al controlador de eventos el siguiente código:

    // 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");
    
  • Ejecute la aplicación y, después, haga clic en Encrypt (Cifrar)
    La cadena de conexión cifrada aparece en el campo Encrypted String (Cadena cifrada).

  • Haga clic en Decrypt (Descifrar).
    La cadena original aparece en el campo Decrypted String (Cadena descifrada).

  • Haga clic en Write Registry Data (Escribir datos en el Registro).

  • En el cuadro de mensaje, haga clic en Aceptar.

  • Ejecute regedit.exe y vea el contenido de la siguiente clave:

    HKLM\Software\TestApplication
    

    Confirme que los valores con nombre connectionString, initVector y key contienen valores codificados.

  • Cierre regedit y la aplicación de uso de prueba.

Crear una aplicación Web ASP.NET

En este procedimiento se desarrolla una sencilla aplicación Web ASP.NET que recuperará la cadena de conexión cifrada en el Registro y la descifrará.

Para crear una aplicación ASP.NET

  • Cree una nueva aplicación Web ASP.NET en Visual C# con el nombre EncryptionWebApp.

  • Agregue una referencia de ensamblado al ensamblado Encryption.dll.
    Para crear el ensamblado, debe realizar los pasos que se describen en "Cómo: Crear una biblioteca de cifrado" en la sección Referencia de esta guía.

  • Abra Webform1.aspx.cs y agregue las siguientes instrucciones using al principio del archivo, justo debajo de las instrucciones using existentes.

    using Encryption; 
       using System.Text; 
       using Microsoft.Win32;
    
  • Agregue a WebForm1.aspx los controles que se enumeran en la tabla 2.
    Tabla 2: Controles de WebForm1.aspx

    Control

    Texto

    Id.

    Etiqueta

    .

    lblEncryptedString

    Etiqueta

    .

    lblDecryptedString

    Botón

    Get Connection String

    btnGetConnectionString

  • Haga doble clic en el botón Get Connection String (Obtener cadena de conexión) para crear un controlador de eventos de clic.

  • Agregue al controlador de eventos el siguiente código:

    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);
    
  • En el menú Generar, haga clic en Generar solución.

  • En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en Webform1.aspx y, a continuación, haga clic en Ver en el explorador.

  • Haga clic en Get Connection String.
    Las cadenas de conexión cifrada y descifrada se muestran en el formulario Web.

Referencias

Para obtener más información, consulte "Cómo: Crear una biblioteca de cifrado" en la sección Referencia de esta guía.

Mostrar:
© 2014 Microsoft