InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
TransactionScope - Simplificando el trabajo con transacciones.
Google Trends, adiós Alexa adiós ...
Fiddler - Indispensable para el desarrollo Web
LinQ To SQL - Un ejemplo sencillo
Cómo activar Intelisense (autocompletado) en el Web.config
Leer un campo XML de SQL Server 2005 con C#
TripleDES - Un ejemplo practico en C#
Mostrar un GridView dentro de un DataList
String.Format
Métodos Extensores: INNER JOIN

Afiliados
La Web del programador
MundoProgramacion


 

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

 


 Versión para imprimir  Foros de consulta

 
=) por Marianita
Respuesta recibida el [19/08/2007 11:30:37]
Interesante articulo, explicado con palabras sencillas.
Me gustaria ver la vercion en C#.

 
versión en c# por aldeamedia
Respuesta recibida el [21/08/2007 07:04:58]
Ahora mismo me pillas un poco apurado de tiempo pero si encuentro un rato publico la versión en c#

 
Funcionalidad por matu
Respuesta recibida el [26/10/2007 04:41:59]
Hola, buen articulo, podrias hacer uno en el cual una vez encriptado el dato este se almacene en SQL Server 2000 y como recuperarlo despues de la DB?.
Saludos

 
para matu por Aldeamedia
Respuesta recibida el [27/10/2007 11:25:52]
El resultado de la función es una cadena de caracteres, puedes insertarlo directamente en SQL 2000 sin problemas , y leerlo después en modo texto desde .net
Para hacerlo directamente en SQL 2000 no es posible , aunque con SQL 2005 tienes un montón de funcionalidades para hacerlo.
La versión en C# sigo sin ponerme con ella, a ver si un dia me animo.

 
Codigo en C# por CodigoX
Respuesta recibida el [12/12/2007 04:03:39]
Hola soy pricionte y quiero saber si podria poner el codigo en C# para que pueda aprender un poco mas..

 
Gracias por Danilo ramirez
Respuesta recibida el [11/01/2008 12:06:00]
en verdad muchísimas gracias, admiro mucho a la gente como tu que siento que lo hacen mas por amor a programar y al saber que por otra cosa, asi que felicidades y gracias de nuevo, pero te faltó poner que imports system.text XD, y yo no sabía eso y tuve que sacarlo XD
saludos

 
Hola por martinrivero@hotmail.com
Respuesta recibida el [16/01/2008 10:30:50]
Hola, Necesito ayuda con un TExto Encriptado, Si alguien me puede ayudar se lo agradeceria, el texto es:

NLAOIE EO PJBOFMMEE RAI URBQELCERS UV MIREOEIAO TE NSVLDE

Gracias .. martinrivero@hotmail.com

 
Desencriptar? por Aldeamedia
Respuesta recibida el [22/01/2008 04:22:08]
Sin saber el algoritmo desencriptar es francamente dificil

Si tienes suerte habrán usado un algoritmo debil busca algún programa que te saque todas las combinaciones posibles de palabras con ese número de letras

 
Codigo en C# por Starcondor
Respuesta recibida el [26/03/2008 06:56:45]

//OJO: primero establecemos un using.
using System.Security.Cryptography;

//...

//Cuerpo del metodo

//Tanto el mensaje como los parametros para la encriptación deben estar
// en formato de Bytes por lo que convertimos Bytes el mensaje inicial
string messageinicial;
messageinicial = "Santas hormonas Batman que secreto tan enigmático";

UnicodeEncoding UE = new UnicodeEncoding();
byte[] message = UE.GetBytes(messageinicial);

//La clase DESCryptoServiceProvider crea el mecanismo de encriptación
//y los paramentros que debemos guardar para poder desencriptar

DESCryptoServiceProvider objDES = new DESCryptoServiceProvider();
//Si queremos una encriptación más segura simplemente:
//TripleDESCryptoServiceProvider objDES = 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 vector de inicializacion iv
byte[] iv = objDES.IV;
byte[] key = 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
ICryptoTransform objCrypto = objDES.CreateEncryptor(key, iv);
MemoryStream cipherStream = new MemoryStream();

//Ahora encriptamos en memoria los datos
CryptoStream cryptoStream = 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á)
byte[] encryptedMessage = cipherStream.ToArray();

 
gracias Starcondor por aldeamedia
Respuesta recibida el [27/03/2008 04:23:31]
Gracias por la traducción Starcondor 

 
encriptar y desencriptar con este algoritmo por hermez
Respuesta recibida el [09/04/2008 07:44:55]
cuando encripto y descencripto me sale el resultado incompleto, 
por ejemplo:
"abcd" ---> se ingresa
"???§" ---> resultado encriptado y entrada para desencriptar
"ab" ---> resultado

deberia salir "abcd"

que puedo estar haciendo mal,alguien me podria ayudar por favor???

 
no me funciona por juan
Respuesta recibida el [28/05/2008 09:32:11]
Sigo con la duda anterior de como se hace para almacenar en sql 2000 y recuperarla desencriptandola, gracias..

 
Para preguntar los foros por aldeamedia
Respuesta recibida el [28/05/2008 01:45:38]
Para preguntar usar los foros esto son sólo comentarios sobre el articulo

 
Como Guardo el dato en la base de datos por Yuset Mercado
Respuesta recibida el [26/06/2008 05:15:59]
Estoy con aldeamedia, como creo que ese valor en string y almacenar en la db2005.


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES
Autor: Pablo Gumpert Fernandez (aldeamedia)
Visitas: 10037 Fecha de publicación: 14/07/2007
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.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 602 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
MAQUINAS VIRTUALES por victor ... [WIN 98/NT/2000/XP] 0 19/08/2008
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
20/07/2006 Transacciones con PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Componentes del lenguaje SQL    forma parte de...Tutorial SQL
24/05/2006 Cursores Implicitos en PL/SQL    forma parte de...Tutorial PL/SQL
09/10/2006 Cadenas de texto    forma parte de...Tutorial C#
11/10/2006 Constantes    forma parte de...Tutorial C#
02/10/2006 Espacio de nombres distribuidos    forma parte de...Tutorial C#
06/10/2006 Importación de espacios de nombres    forma parte de...Tutorial C#
03/10/2006 Fundamentos de C#    forma parte de...Tutorial C#
03/10/2006 Programacion con C#    forma parte de...Tutorial C#
19/10/2006 Llamadas asíncronas    forma parte de...Tutorial C#

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]