Encriptar datos del fichero .config

03/02/2005 - 17:31 por Ambros | Informe spam
Hola a todos

Estoy desarrollando una aplicación en la que quiero guardar en el fichero
.config la cadena de conexión a la BBDD SQL pero encriptado. He oido algo de
que .Net puede codificar info. con el método DES.

¿Me podríais dar un ejemplo de como podría hacer esto?

Muchas gracias a todos por vuestra ayuda.

Preguntas similare

Leer las respuestas

#1 Marino Posadas
03/02/2005 - 20:21 | Informe spam
Hola Ambros

Una vez establecido que lo que quieres encriptar es texto plano, lo segundo,
es determinar el grado de "seriedad" del algoritmo de encriptación (DES,
TripleDES, RC2 o Rijndael -y todo esto, usando los algorítmos fáciles, los
simétricos). Todos ellos se correponden con namespaces de
System.Security.Criptography. Supongamos que te conformas con el primero
(DES):

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
static void Main(string[] args)
{
// datos a encriptar
string cipherData = "Esto es texto plano (del App.config, por ejemplo)";
// Datos encriptados
byte[] cipherbytes;
// Texto plano en forma de bytes
byte[] plainbytes = Encoding.ASCII.GetBytes(cipherData);
// Instancia de la clase DES
SymmetricAlgorithm desObj = DES.Create();
// generamos la clave simétrica
desObj.GenerateKey();
// generamos el vector
desObj.GenerateIV();
// seleccion de modo (CBC, CFB, CTS, ECB, OFB)
desObj.Mode = CipherMode.CBC;
// seleccionamos el "Padding"
desObj.Padding = PaddingMode.PKCS7;

// ENCRIPTACION
// Los MemoryStream (recuerda, estan en System.IO), son ideales para
esto
MemoryStream ms = new MemoryStream();
// transforma y encripta al memorystream
CryptoStream cs = new
CryptoStream(ms,desObj.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(plainbytes, 0, plainbytes.Length);
cs.Close();
// pasamos los datos encriptados del memorystream a bytes
cipherbytes = ms.ToArray();
ms.Close(); //siempre cierra los MS
Console.WriteLine("Resultado cifrado: "+
Encoding.ASCII.GetString(cipherbytes));

// DESENCRIPTACION
MemoryStream ms1 = new MemoryStream(cipherbytes);
CryptoStream cs1 = new CryptoStream(ms1, desObj.CreateDecryptor(),
CryptoStreamMode.Read);
// se genera un array de bytes de la misma longitud que el array cifrado
plainbytes = new Byte[cipherbytes.Length];
// descifra el texto de la sección anterior
cs1.Read(plainbytes, 0, cipherbytes.Length);
cs1.Close();
ms1.Close();
Console.WriteLine("Resultado descifrado:
"+Encoding.ASCII.GetString(plainbytes));
}

Espero que te sirva

Saludos cordiales,
Marino Posadas
MVP - Visual C#
MCSD, MCAD, MCT
Alhambra-Eidos

"Ambros" escribió en el mensaje
news:%
Hola a todos

Estoy desarrollando una aplicación en la que quiero guardar en el fichero
.config la cadena de conexión a la BBDD SQL pero encriptado. He oido algo
de
que .Net puede codificar info. con el método DES.

¿Me podríais dar un ejemplo de como podría hacer esto?

Muchas gracias a todos por vuestra ayuda.


Respuesta Responder a este mensaje
#2 Ambros
07/02/2005 - 16:58 | Informe spam
Muchas gracias Marino por tu ayuda!!

Querría hacerte una pregunta más:
Me han hablado tb. de la libreria de Seguridad de Microsoft llamada
CAPICOM... He estado chequeando la doc. que existe en la web de Microsoft y
está basado en ActiveX. Mi impresión es que esta librería está menos
avanzada que la librería de .Net. ¿Que me puedes comentar?


"Marino Posadas" escribió en el mensaje
news:%
Hola Ambros

Una vez establecido que lo que quieres encriptar es texto plano, lo


segundo,
es determinar el grado de "seriedad" del algoritmo de encriptación (DES,
TripleDES, RC2 o Rijndael -y todo esto, usando los algorítmos fáciles, los
simétricos). Todos ellos se correponden con namespaces de
System.Security.Criptography. Supongamos que te conformas con el primero
(DES):

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
static void Main(string[] args)
{
// datos a encriptar
string cipherData = "Esto es texto plano (del App.config, por


ejemplo)";
// Datos encriptados
byte[] cipherbytes;
// Texto plano en forma de bytes
byte[] plainbytes = Encoding.ASCII.GetBytes(cipherData);
// Instancia de la clase DES
SymmetricAlgorithm desObj = DES.Create();
// generamos la clave simétrica
desObj.GenerateKey();
// generamos el vector
desObj.GenerateIV();
// seleccion de modo (CBC, CFB, CTS, ECB, OFB)
desObj.Mode = CipherMode.CBC;
// seleccionamos el "Padding"
desObj.Padding = PaddingMode.PKCS7;

// ENCRIPTACION
// Los MemoryStream (recuerda, estan en System.IO), son ideales para
esto
MemoryStream ms = new MemoryStream();
// transforma y encripta al memorystream
CryptoStream cs = new
CryptoStream(ms,desObj.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(plainbytes, 0, plainbytes.Length);
cs.Close();
// pasamos los datos encriptados del memorystream a bytes
cipherbytes = ms.ToArray();
ms.Close(); //siempre cierra los MS
Console.WriteLine("Resultado cifrado: "+
Encoding.ASCII.GetString(cipherbytes));

// DESENCRIPTACION
MemoryStream ms1 = new MemoryStream(cipherbytes);
CryptoStream cs1 = new CryptoStream(ms1, desObj.CreateDecryptor(),
CryptoStreamMode.Read);
// se genera un array de bytes de la misma longitud que el array


cifrado
plainbytes = new Byte[cipherbytes.Length];
// descifra el texto de la sección anterior
cs1.Read(plainbytes, 0, cipherbytes.Length);
cs1.Close();
ms1.Close();
Console.WriteLine("Resultado descifrado:
"+Encoding.ASCII.GetString(plainbytes));
}

Espero que te sirva

Saludos cordiales,
Marino Posadas
MVP - Visual C#
MCSD, MCAD, MCT
Alhambra-Eidos

"Ambros" escribió en el mensaje
news:%
> Hola a todos
>
> Estoy desarrollando una aplicación en la que quiero guardar en el


fichero
> .config la cadena de conexión a la BBDD SQL pero encriptado. He oido


algo
> de
> que .Net puede codificar info. con el método DES.
>
> ¿Me podríais dar un ejemplo de como podría hacer esto?
>
> Muchas gracias a todos por vuestra ayuda.
>
>


Respuesta Responder a este mensaje
#3 Marino Posadas
07/02/2005 - 20:51 | Informe spam
Hola Ambros

Efectivamente, es antigua. Y sobre todo, está basada en una tecnología ya
obsoleta (ActiveX). Mejor aplícate al .NET...)))


Saludos cordiales
Marino Posadas
MVP Visual C#

www.ElAveFenix.net

"Ambros" escribió en el mensaje
news:
Muchas gracias Marino por tu ayuda!!

Querría hacerte una pregunta más:
Me han hablado tb. de la libreria de Seguridad de Microsoft llamada
CAPICOM... He estado chequeando la doc. que existe en la web de Microsoft
y
está basado en ActiveX. Mi impresión es que esta librería está menos
avanzada que la librería de .Net. ¿Que me puedes comentar?


"Marino Posadas" escribió en el mensaje
news:%
Hola Ambros

Una vez establecido que lo que quieres encriptar es texto plano, lo


segundo,
es determinar el grado de "seriedad" del algoritmo de encriptación (DES,
TripleDES, RC2 o Rijndael -y todo esto, usando los algorítmos fáciles,
los
simétricos). Todos ellos se correponden con namespaces de
System.Security.Criptography. Supongamos que te conformas con el primero
(DES):

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
static void Main(string[] args)
{
// datos a encriptar
string cipherData = "Esto es texto plano (del App.config, por


ejemplo)";
// Datos encriptados
byte[] cipherbytes;
// Texto plano en forma de bytes
byte[] plainbytes = Encoding.ASCII.GetBytes(cipherData);
// Instancia de la clase DES
SymmetricAlgorithm desObj = DES.Create();
// generamos la clave simétrica
desObj.GenerateKey();
// generamos el vector
desObj.GenerateIV();
// seleccion de modo (CBC, CFB, CTS, ECB, OFB)
desObj.Mode = CipherMode.CBC;
// seleccionamos el "Padding"
desObj.Padding = PaddingMode.PKCS7;

// ENCRIPTACION
// Los MemoryStream (recuerda, estan en System.IO), son ideales para
esto
MemoryStream ms = new MemoryStream();
// transforma y encripta al memorystream
CryptoStream cs = new
CryptoStream(ms,desObj.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(plainbytes, 0, plainbytes.Length);
cs.Close();
// pasamos los datos encriptados del memorystream a bytes
cipherbytes = ms.ToArray();
ms.Close(); //siempre cierra los MS
Console.WriteLine("Resultado cifrado: "+
Encoding.ASCII.GetString(cipherbytes));

// DESENCRIPTACION
MemoryStream ms1 = new MemoryStream(cipherbytes);
CryptoStream cs1 = new CryptoStream(ms1, desObj.CreateDecryptor(),
CryptoStreamMode.Read);
// se genera un array de bytes de la misma longitud que el array


cifrado
plainbytes = new Byte[cipherbytes.Length];
// descifra el texto de la sección anterior
cs1.Read(plainbytes, 0, cipherbytes.Length);
cs1.Close();
ms1.Close();
Console.WriteLine("Resultado descifrado:
"+Encoding.ASCII.GetString(plainbytes));
}

Espero que te sirva

Saludos cordiales,
Marino Posadas
MVP - Visual C#
MCSD, MCAD, MCT
Alhambra-Eidos

"Ambros" escribió en el mensaje
news:%
> Hola a todos
>
> Estoy desarrollando una aplicación en la que quiero guardar en el


fichero
> .config la cadena de conexión a la BBDD SQL pero encriptado. He oido


algo
> de
> que .Net puede codificar info. con el método DES.
>
> ¿Me podríais dar un ejemplo de como podría hacer esto?
>
> Muchas gracias a todos por vuestra ayuda.
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida