Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES

Un articulo que por motivos de longitud del codigo se ha ido retrasando: como encritar usando algoritmos OFICIALES.

Este articulo está dividido en dos partes, encriptar con VB.net y desencriptar con C#

podeis ver la segunda parte aqui:

http://www.devjoker.com/contenidos/Articulos/280/Desencriptar-Texto-y-variables-con-NET-VB-y-C-(segunda-parte).aspx

Para este ejemplo usaremos el algoritmo DES que aunque ya ha sido reventado por superordenadores para una encriptación sencilla vale, si queremos usar un algoritmo más complejo como TRIPLEDES o RINDAJEL basta con cambiar una linea de codigo donde se indica, en el segundo articulo sin embargo usaremos TRIPLE DES

Normalmente los bancos suelen utilizar Triple Des para encritar sus datos lo que da una idea de su seguridad, pero para un aplicativo DES puede ser más que suficiente.

En este articulo enseñaremos encriptación simetrica, es decir la misma clave sirve para encriptar y desencriptar.

'OJO: primero establecemos un imports System.Security.Cryptography.

 

'Tanto el mensaje como los parametros para la encriptación deben estar

' en formato de Bytes por lo que convertimos Bytes el mensaje inicial

Dim messageinicial As String

messageinicial = "Santas hormonas Batman que secreto tan enigmático"

 

Dim UE As New UnicodeEncoding()

Dim message As Byte() = UE.GetBytes(messageinicial)

 

 

'La clase DESCryptoServiceProvider crea el mecanismo de encriptación

'y los paramentros que debemos guardar para poder desencriptar

 

Dim objDES As New DESCryptoServiceProvider

'Si queremos una encriptación más segura simplemente:

'Dim objDES As New TripleDESCryptoServiceProvider

 

'En vez de depender de un sólo parametro o clave esta encriptación se basa en dos parametros

'Una clave Key y un desplazamiento iv

Dim iv As Byte() = objDES.IV

Dim key As Byte() = objDES.Key

 

 

'Ahora necesitamos un Buffer o Stream para almacenar la encriptación

'Y un objeto ICryptoTransform que encripte los datos

' con independencia del algoritmo que usemos pero basado en los parametros

' que hemos creado antes

Dim objCrypto As ICryptoTransform = objDES.CreateEncryptor(key, iv)

Dim cipherStream As New IO.MemoryStream

 

'Ahora encriptamos en memoria los datos

Dim cryptoStream As New CryptoStream _

(cipherStream, objCrypto, CryptoStreamMode.Write)

cryptoStream.Write(message, 0, message.Length)

 

'Ahora guardamos el mensaje ya encriptado en una variable

'Para desencriptarlo necesitariamos los dos parametros iv y key

'Y usar el mismo algoritmo de encriptado

(aparte del mensaje a desencriptar claro está)

Dim encryptedMessage As Byte()

encryptedMessage = cipherStream.ToArray()

Esa sería la forma, luego sólo bastaría guardar en un lugar seguro las claves para poder desencriptar, en este caso hemos dejado que se generen automáticamente ambas claves pero podriamos usar siempre las mismas claves aunque esto es menos seguro.

Cuando creamos un DESCryptoServiceProvider automáticamente se crean las claves (ojo no confundir estas claves  con el par de claves publica y privada de la encriptación asimetrica que tiene otro código) pero no es obligatorio usar esas mismas claves, podemos sobreescribirlas si queremos para usar siempre las mismas.

Si os gusta el articulo podeis dejar un mensaje en los comentarios pero recordar que para las preguntas se usan los foros (no es necesario registrarse) no he incluido el codigo en C# pero si alguien lo necesita puede dejar un cometario y en breve pondremos la versión en C#.

Y recordar que la segunda parte del articulo podeis consultarla aqui:

podeis ver la segunda parte aqui:

http://www.devjoker.com/contenidos/Articulos/280/Desencriptar-Texto-y-variables-con-NET-VB-y-C-(segunda-parte).aspx

 

Pablo  Gumpert  Fernandez (aldeamedia)
Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES
Pablo Gumpert Fernandez (aldeamedia)

Pablo Gumpert es formador y consultor oficial de Microsoft para .NET y SQL server.Lleva desarrollando desde hace más de diez años y durante ese tiempo ha trabajado como programador de videojuegos ,analista informático, experto en seguridad, DBA ... Actualmente se dedica sobre todo a la formación. Su especialidad es la programación en .NET aunque también es experto en MSSQL Server y en el año 2002 fundó su propia empresa colaboradora de diversos centros partner Microsoft.
Fecha de alta:14/07/2007
Última actualizacion:14/07/2007
Visitas totales:64001
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com