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.IVDim 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