Welcome to WindowsClient.net | My Blog | Sign in | Join

Using System.Linkecubeko

Blog de programacion de la plataforma .NET

Como cifrar y descifrar texto usando C#

Hola, este tema es un poco mas complicado que el pasado, pero también creo que es de mucha utilidad, mas que nada cuando quieres guardar usuarios en una base de datos y no quieres que nadie, ni si quiera tu pueda saber la contraseña de los usuarios con tan solo mirar la tabla o con alguna consulta desde cualquier manejador de base de datos sea cual sea este.

Este es un simple ejemplo hecho en C# de cómo encriptar y descencriptar texto utilizando una serie de clases provee el Framework, aquí una breve explicación de estas clases.

Clases y Espacios de nombres importantes para su implementación son:

using System.Text;
using System.Security.Cryptography;

MD5CryptoServiceProvider (Clase)


Calcula el valor de hash MD5 (Message-Digest Algorithm 5), de los datos de entrada utilizando la implementación proporcionada por el proveedor de servicios criptográfico (CSP). Esta clase no se puede heredar.

UTF8Encoding (Clase)

Representa una codificación UTF-8 de caracteres Unicode.

TripleDESCryptoServiceProvider (Clase)

Define un objeto contenedor para obtener acceso a la versión del proveedor de servicios criptográficos (CSP) del algoritmo TripleDES (algoritmo que hace triple cifrado del algoritmo Data Encryption Standard) No se puede heredar esta clase.

CipherMode (Enumeración)

Especifica el modo de cifrado de bloques que se utilizará para cifrar.

PaddingMode (Enumeración)

Especifica el tipo de relleno que se aplica cuando el bloque de datos del mensaje es más pequeño que el número total de bytes necesarios para una operación criptográfica.

ICryptoTransform (Interfaz)

Define las operaciones básicas de las transformaciones criptográficas.

Después de ver esto, creamos un proyecto de visual Studio de tipo Windows Application y ya una ves en el explorador de soluciones agregamos una nueva clase y ponemos el siguiente código de una clase que yo ocupo para encriptar texto en mis aplicaciones, se llama CcryptorEngine, que tiene un atributo “key” de tipo string que es la clave que se necesita para cifrar y descifrar el texto, solo dos métodos uno que encripta el texto y otro que lo descencripta, pero debemos recordar que el texto que sea cifrado con determinada clave solo se puede descifrar con la misma clave.

class CCryptorEngine
{
private string key;
//constructor
public CCryptorEngine()
{
/* Establecer una clave. La misma clave
debe ser utilizada para descifrar
los datos que son cifrados con esta clave.
pueden ser los caracteres que uno desee*/

key = "ABCDEFGHIJKLMÑOPQRSTUVWXYZ
abcdefghijklmnñopqrstuvwxyz"
;
}


public string Encriptar(string texto)
{
//arreglo de bytes donde guardaremos la llave
byte[] keyArray;
//arreglo de bytes donde guardaremos el texto
//que vamos a encriptar

byte[] Arreglo_a_Cifrar =
UTF8Encoding.UTF8.GetBytes(texto);

//se utilizan las clases de encriptación
//provistas por el Framework
//Algoritmo MD5

MD5CryptoServiceProvider hashmd5 =
new MD5CryptoServiceProvider();
//se guarda la llave para que se le realice
//hashing

keyArray = hashmd5.ComputeHash(
UTF8Encoding.UTF8.GetBytes(key));

hashmd5.Clear();

//Algoritmo 3DAS
TripleDESCryptoServiceProvider tdes =
new TripleDESCryptoServiceProvider();

tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;

//se empieza con la transformación de la cadena
ICryptoTransform cTransform =
tdes.CreateEncryptor();

//arreglo de bytes donde se guarda la
//cadena cifrada

byte[] ArrayResultado =
cTransform.TransformFinalBlock(Arreglo_a_Cifrar,
0, Arreglo_a_Cifrar.Length);

tdes.Clear();

//se regresa el resultado en forma de una cadena
return Convert.ToBase64String(ArrayResultado,
0, ArrayResultado.Length);
}


public string Desencriptar(string textoEncriptado)
{
byte[] keyArray;
//convierte el texto en una secuencia de bytes
byte[] Array_a_Descifrar =
Convert.FromBase64String(textoEncriptado);

//se llama a las clases que tienen los algoritmos
//de encriptación se le aplica hashing
//algoritmo MD5

MD5CryptoServiceProvider hashmd5 =
new MD5CryptoServiceProvider();

keyArray = hashmd5.ComputeHash(
UTF8Encoding.UTF8.GetBytes(key));

hashmd5.Clear();

TripleDESCryptoServiceProvider tdes =
new TripleDESCryptoServiceProvider();

tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;

ICryptoTransform cTransform =
tdes.CreateDecryptor();

byte[] resultArray =
cTransform.TransformFinalBlock(Array_a_Descifrar,
0, Array_a_Descifrar.Length);

tdes.Clear();
//se regresa en forma de cadena
return UTF8Encoding.UTF8.GetString(resultArray);
}
}

Después diseñamos una Windows Form más o menos así.

EncDec

Ponemos Tres cajas de texto, tres etiquetas, tres botones y unas imágenes PNG de flechas, lo que hace el programa es que al dar clic al botón encriptar cifra el texto del primer textbox y lo muestra en el segundo y al dar clic al botón descencriptar descifra el texto y lo muestra en el ultimo textbox, esto se muestra en el siguiente código.

private void button1_Click(object sender, EventArgs e)
{
//se agrega un bloque try catch
//para prevenir cualquier error

try
{
//se crea un objeto de la clase CCryptorEngine
CCryptorEngine crypto = new CCryptorEngine();
//se cifra la información del textbox1
textbox2.Text = crypto.Encriptar(textbox1.Text);
}
catch(Exception ex)
{
MessageBox.Show("Ocurrió un error: "
+ ex.Message);
}
}

private void button2_Click(object sender, EventArgs e)
{
//se agrega un bloque try catch para
//prevenir cualquier error

try
{
//se crea un objeto de la clase CCryptorEngine
CCryptorEngine crypto = new CCryptorEngine();
//se descifra la información del textbox2
textbox3.Text =
crypto.Desencriptar(textbox2.Text);
}
catch(Exception ex)
{
MessageBox.Show("Ocurrió un error: "
+ ex.Message);
}
}

Con esto ya tenemos una aplicación que cifra y descifra texto y no solo se puede usar en Windows Forms yo lo he utilizado en paginas web en ASP.net, en móviles y en servicios web XML, todo esto en .Net, bueno espero esto le sirva a alguien.

Saludos!!!

Aquí dejo en link de mi SkyDrive para que bajen esta aplicación con todo y su código fuente link


Etiquetas de Technorati: ,

Comments

chuchos said:

EXELENTE!!

He estado buscando durante mucho tiempo un ejemplo de esto, no sabes como te lo agradesco.

# July 22, 2009 10:16 AM

MIME said:

Hola... super bien. Quisiera hacer lo mismo en Action Script ahora solo falta cambiarlo. Alguien ya lo tiene??
# November 17, 2009 6:22 PM

carlos said:

Me parece ideal todo esto, pero cuando dices,

"cuando quieres guardar usuarios en una base de datos y no quieres que nadie, ni si quiera tu pueda saber la contraseña"

Si el usuario quiere recordar la clave y que se la mande a su correo?

que solución me das?

# November 20, 2009 8:56 AM

Edgar Rafael Galicia Reyes said:

Hola Carlos, Lo que yo aria en ese caso es hacer una consulta al campo de la contraseña en la BD y una vez con el  descencriptarlo y enviarlo por correo.

# November 20, 2009 10:53 AM

MCP Oscar R. said:

Hola, tienes las soluciones descargables?
# November 27, 2009 12:49 PM

GyoX said:

Un dia te van a pedir que les hagas tu su trabajo en la empresa xD. Buen post, me vino muy bien y me hizo ver lo verde que estoy en criptografia. Sigue así ;)

# December 9, 2009 10:27 AM

Mr Rios said:

Simplemente sin palabras, excelente post, definitivamente no se me da la encriptacion.

Esto me ayudara bastante.

# February 3, 2010 1:49 PM

Rafael Ramírez said:

Me ha fascinado tu post, todo está excelente, sólo como comentario, el nombrar a los métodos "Encriptar" "Desencriptar" me da un poco de miedo, eso de llenarlo de criptas o quitarle las criptas, siempre pensé que lo correcto era llamarlos "Cifrar" "Descifrar", sé que no afecta en nada a la programación, pero siempre creí que así era. Saludos, y felicidades !
# February 24, 2010 11:33 AM

Dr Omm said:

Compare... muchas gracia por tu aportación. Muy bien explicado y fácil de seguir. Excelente para ser aplicado.

Saludos

# May 26, 2010 1:59 PM

Jota said:

Hola, de veras gracias por este post, necesitaba algo asi con urgencia y los q encontraba por alguna razon no m servian, pero este ya lo probé y m sirvio al pelo, gracias pana... a2.

# June 14, 2010 2:54 PM

tmsolutions said:

Gracias.... un excelente trabajo, felicitaciones me sirvio un monto... sigue asi eres GRANDE

# August 19, 2010 11:57 AM

Klasico said:

te agradesco es un buen ejemplo y vaya que sirve como tutorial

# August 22, 2010 1:20 AM

isaias lara said:

hola que tal;  estan muy bien tu ejemplos ;te pido un favor ,estoy desarrollando una aplicacion en visual studio 2008 , y utilizo slqserver 2005 para la base de datos, en mi aplicacion la informacion la muestro en un datagridview ,como puedo enviar a imprimir desde mi aplicacion a una impresora disponible, bueno cuento con tu ayuda sale espero y me puedas ayudar me urge un poco

# September 7, 2010 3:08 PM

Jorge V C said:

Eres un genio !!!, bueno kizas no en realidad pero para esto hay que tener muchisimo conocimiento. Te felicito
# October 20, 2010 6:35 PM

javprieto said:

gracias por el aporte
# October 28, 2010 3:00 PM

Chucho Chicles Emperador said:

Que onda edgar no pues felicidades te sacaste un 100 me sirvio de mucho tu info corrio a la perfeccion muchas gracias FELIZ NAVIDAD¡¡¡¡
# November 25, 2010 9:22 PM

Chucho said:

NO PUES MUCHAS GRACIAS CORRIO A LA PERFECCION TE SACASTE UN 100 FELIZ NAVIDAD¡¡ JO JO JO JO
# November 25, 2010 9:24 PM

Silver said:

Que bien. esta muy bueno este ejemplo. gracias por :)
# January 11, 2011 4:08 PM

Silver said:

Que buen ejemplo. Mil gracias amigos. saludos
# January 11, 2011 4:17 PM

Maytag repair los angeles said:

Realment bloc informatiu aquí el meu amic. Només volia fer un comentari i dir mantenir la qualitat del treball. He marcat el teu ara i vaig a tornar a llegir més en el futur del meu amic! També bé elegits els colors sobre el tema que va bé amb el blog en la meva modesta opinió:)

# April 6, 2011 1:22 PM

buy anabolics online said:

Gràcies pel missatge d'ajuda! Jo no hauria arribat a aquesta altra manera!

# April 7, 2011 12:43 PM

forex broker reviews said:

Només pensava que anava a comentar i dir que gran tema, el de codi per si mateix? Realment sembla fantàstic!

# April 9, 2011 1:19 PM

forex investment said:

Preserve ‘em on its way…one many can an extremely great job located at these sort of Basics…are not able to inform you of how much I JUST, for example take pleasure in all you could complete!

# April 17, 2011 2:23 PM

appliance repair Irvine said:

IЎЇm delighted that I have observed this weblog. Finally something not a junk, which we undergo extremely frequently. The website is lovingly serviced and stored as much as date. So it should be, thanks for sharing this with us.

# April 28, 2011 6:43 PM

Darky said:

Muchas gracias.. me sirvió mucho este ejemplo...

# May 13, 2011 9:56 AM

Guías de San Petersburgo said:

Hola, Chicas! Jo només volia fer una observació ràpida de dir que m'alegro d'haver trobat el teu bloc. Gràcies

# June 1, 2011 3:44 AM

website hits said:

Highly rated post. I learn one thing completely new on totally different blogs everyday. Deciding on one . stimulating to read the paper content material from different writers and learn slightly one thing from their website. I’d like to apply sure of this content on my weblog you’re mind. Natually I’ll give a hyperlink here we're at your internet-site. Appreciate your sharing.

# June 3, 2011 1:39 AM

get traffic said:

Hola, he trobat el teu bloc a través de Google, mentre que la recerca de primers auxilis per a un atac de cor i el seu lloc es veu molt interessant per a mi.

# June 4, 2011 3:10 AM

appliance repair said:

Grande, he encontrado lo que "he estado buscando para

# June 7, 2011 1:35 AM

guanyar diners des de casa said:

Gràcies per publicar això, va ser molt útil i li va dir a una gran quantitat

# June 22, 2011 7:06 PM

Ivan said:

Sos un maestro gracias por lo subido me sirvio un monton

espero que sigas con tus aportes

# July 13, 2011 8:52 AM

Sarita1958 said:

Eu tenho alguma sabedoria maravilhosa.

# July 23, 2011 1:30 AM

lighting wholesale said:

Hola a todos , yo solía ser sólo checkin ' de esta bitácora y yo realmente admiro la idea del artículo, y no tienen nada que hacer , así que si alguien quiere tener un combo fascinante al respecto , por favor póngase en contacto conmigo en el AIM , mi nombre es Heather Smith

# August 23, 2011 8:03 AM

Manufacturers of lamps for the home said:

Mi socio y yo realmente disfrutamos de la lectura de este blog publicar, yo era simplemente ganas de saber qué mensajes comerciales destacado? Estoy todo el tiempo buscando a alguien para hacer operaciones con y simplemente pensé que iba a preguntar.

# August 24, 2011 7:20 AM

private tours in St.Petersburg said:

Enhorabuena por la posesión de una realidad entre uno de los blogs cruciales refinado Ive llegar a través de un tiempo ! Es simplemente increíble lo mucho que va a ser capaz de considerar fuera de un factor , principalmente debido simplemente a la forma visualmente impresionante que es. Lugar Youve colectivamente un gran sitio web weblog casa bonita gráfica , cine , diseño. Que es sin duda un sitio web que hay que ver !

# August 24, 2011 1:36 PM

outdoor lighting manufacturers canada said:

Usted debe pensar realmente acerca dedicados a la creación de este blog en una autoridad importante en este mercado . Usted , evidentemente, tienen una manija comprensión de los temas que cada uno está buscando en este sitio web , en cualquier caso , y que sin duda puede incluso ganar un dólar o dos fuera de algunos anuncios . Me descubrir siguientes temas recientes y el aumento de la cantidad de comentarios escritos a configurar y te aseguro que me empiezan a ver algo de tráfico excelente objetivo en un futuro próximo . Es sólo una idea , buena suerte en no importa que hagas !

# September 3, 2011 1:22 PM

изготовление металлоконструкций said:

Pensé que después de algo como esto en mi sitio y me dio una idea. Saludos .

# September 6, 2011 3:10 PM

outdoor lighting manufacturers usa said:

Muchas gracias por publicar esto , ¡¯ s justo lo que estaba investigando para el bing . I ? D tanto relativamente escuchar las opiniones de una persona , un poco de una página web de la empresa de Internet , que ? S por eso que , como los blogs de manera tan significativa . Muchas gracias !

# September 6, 2011 3:12 PM

outdoor lighting manufacturers said:

Simplemente matar a algunos de entre el tiempo de clase en Digg y descubrí su artículo. Por lo general no lo que yo prefiero estudiar , pero estaba completamente el precio de mi tiempo. Gracias .

# September 13, 2011 6:08 AM

outdoor lighting manufacturers canada said:

El posicionamiento en buscadores quiere un motor muy bueno plan de búsqueda del optimizador. Simplemente una de estas estrategias pueden hacer una gran diferencia en su lugar de sitios web y empresa de su sitio web le ofrece .

# September 13, 2011 11:08 AM

Ivanhoe said:

Muchas gracias por el ejemplo, ha sido de mucha ayuda.

Saludos!

# September 14, 2011 10:45 AM

appliance repair Irvine said:

una iniciativa interesante para todo el mundo . incluso los principiantesrnasí : Muy valorados mensaje . He aprendido una cosa totalmente nueva en los blogs completamente diferentes al día. Decidir sobre una . estimular a leer el material contenido en papel de diferentes escritores y aprender un poco una cosa en su sitio web . Me gustaría aplicar ciertos contenidos de este material en mi weblog que está presente . Natually voy a dar un hipervínculo aquí estamos a su sitio web. Agradecemos su participación .

# September 17, 2011 3:06 AM

Cheap oem software said:

LL45gj Somewhere in the Internet I have already read almost the same selection of information, but anyway thanks!!...

# September 25, 2011 7:05 AM

paco said:

mil gracias crack

# October 4, 2011 7:54 PM

comprar Sustanon said:

El domini sembla tenir una bona quantitat de visitants. Com aconseguir trànsit a ella? Ofereix una única volta agradable de les coses. Suposo que alguna cosa real o substancial a parlar és d'allò més important.

# October 15, 2011 6:01 PM

fontgrade said:

very nice posting

# November 4, 2011 5:15 AM

Cheap oem software said:

zRETn7 However, the author created a cool thing..!!

# November 12, 2011 2:16 PM

Cheap software online said:

kd4JmQ I would add something else, of course, but in fact almost everything is mentioned!....

# November 13, 2011 6:28 PM

NEX-5 said:

missatge lloc excepcional. Jo vaig a marcar i veure molt més sovint. M'agrada molt la plantilla de pàgina web

# November 15, 2011 2:08 AM

AlejoNait said:

Hola... pues dejame agradercerte por el código de verdad que lo necesitaba...no te imáginas cuento sufri para encontrarlo... aunque la verdad lo necesitaba en VB.. pero me fue sencillo pasarlo al otro idioma.. muchas gracias ee ;D

# November 17, 2011 6:13 PM

buy anabolics online said:

Ah, pensé que esto era un puesto muy bueno. En concepto que tiene que poner por escrito de esta manera , además - de tomar el tiempo y el esfuerzo real para hacer un excelente artículo ... pero exactamente ¿qué digo yo ... dilatar mucho por no indica encontrar una manera de ir llevado a cabo .

# November 18, 2011 6:26 AM

outdoor lighting manufacturers canada said:

Mi esposa y yo nos complace Raymond podía hacer frente a sus estudios fuera de las recomendaciones precioso que salió del blog. Es una y otra vez desconcertante para posiblemente sólo se ofrecen las tácticas que muchas otras personas pueden haber estado haciendo dinero desde . Y vemos que tenemos el dueño del blog que estar agradecidos a este . Todas las explicaciones que ha realizado, la navegación del sitio simple, las amistades que pueden ayudar a inculcar - todo es impresionante, y está ayudando a nuestro hijo y la razón por la familia por qué este tema es satisfactoria, que sin duda es muy indispensable. Muchas gracias por todo el lote !

# November 21, 2011 4:36 AM

buy anabolic steroids said:

He estado ausente por un tiempo, pero ahora recuerdo por qué me encantaba este sitio web. Gracias, voy a tratar de comprobar de nuevo más a menudo. ¿Con qué frecuencia se actualiza su sitio web?

# November 22, 2011 6:00 AM

Juan said:

Hola. Muy currado el post.

Tengo un problema con el vector inicial, en este ejemplo no se utiliza y yo quiero poder meter qué vector inicial voy a usar.

Espero que alguien me pueda echar una mano.

# November 22, 2011 8:50 AM

Luis said:

Excelente amigo....si te la rifaste...10 ...

# November 24, 2011 3:54 AM

winstrol said:

Hola windowsclient.net. Encontré su sitio web a través de Google en la búsqueda de una cuestión similar, su sitio web tiene aquí arriba. Parece bueno. He marcado en mis favoritos de Google para volver más tarde.

# November 30, 2011 7:56 PM

comprar Sustanon said:

Sin duda que desee para entregar un concepto rápida de darle las gracias por los consejos y sugerencias bonito que está publicando en windowsclient.net. Mi tiempo en Internet aparecen hasta ahora ha sido recompensado con estrategias útiles para el intercambio con mi familia y amigos. Me dicen que estamos hecho los lectores son realmente la bendición de vivir en una comunidad muy útil con algunas personas grandes con puntos profundos. Realmente me siento muy agradecido de conseguir descubrir la página web y aparecen por delante de un montón de otros momentos divertidos de leer aquí. Gracias mucho de nuevo por una buena cantidad de cosas.

# December 4, 2011 9:16 AM

comprar winstrol said:

Nada en contra del artículo, pero no estoy de acuerdo con un par de puntos a algunos extenct. Soy probablemente una minoría, sin embargo, lol. Gracias por compartirlo en windowsclient.net.

# December 5, 2011 11:45 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)