cifrar

25/07/2003 - 06:49 por Geni | Informe spam
Hola, a todos, se que esta pregunta es bastante básica para muchos de uds,
pero hasta ahora no he conseguido resolverlo. Quiero encriptar una cadena de
caracteres usando uno de los algoritmos de encripción que proporciona .net.
Pero en la documentación solo encuentro ejemplos para encriptar archivos.
Alguien tiene algún ejemplo que me permita saber como realizar este tipo de
operaciones sobre cadena de caracteres. Les agradezco su ayuda.

Preguntas similare

Leer las respuestas

#1 Geni
25/07/2003 - 18:38 | Informe spam
Hola, efectivamente me referiero a la clase CryptoStream, especificamente
usando al proveedor de Encripción DES. Dentro de la documentación que he
leído solo se manejan ejemplos sobre cifrado de archivos, no se mencionan
cadenas de caracteres. Supongo que al estar utilizando streams, se pueden
aplicar las misma reglas para cualquier flujo, sólo que no sé que clase
derivada de Stream debo usar. Por ejemplo, tengo que cifrar y decifrar la
cadena "Genice Sedano Montalvo".

No pude implementar lo que mencionas sobre StringReader/StringWriter, me dá
errores de tipos no válidos...gracias por la paciencia.
Respuesta Responder a este mensaje
#2 Hernan Foffani
25/07/2003 - 19:56 | Informe spam
Hola, efectivamente me referiero a la clase CryptoStream,
especificamente usando al proveedor de Encripción DES.
...
No pude implementar lo que mencionas sobre
StringReader/StringWriter, me dá errores de tipos no
válidos...gracias por la paciencia.



disculpa, tienes razon. mucho java ultimamente.

como stream de entrada podrías usar:
finp = new MemoryStream(ConvertStringToByteArray(cadena));
como stream de salida:
fout = new MemoryStream(longitudEsperada);
y luego fout.GetBuffer() para obtener el array cifrado.

a tener en cuenta:
la cifra procesa array de bytes, no strings.
las longitudes de clave y semilla dependen del algoritmo
de cifra que uses.

-Hernan
Respuesta Responder a este mensaje
#3 Geni
25/07/2003 - 21:59 | Informe spam
saludos nuevamente, utilicé la clase MemoryStream como parametro de la la
clase CryptoStream, pero me está devolviendo espacios en blanco como buffer
de salida, este es el código que estoy utilizando para encriptar:

public string Encriptar(string Cadena)
{
byte[] key = this.KeyByteArray("clave");
byte[] codeIV = this.KeyByteArray("code");

byte[] bufferSalida = new byte[Cadena.Length];
MemoryStream fout = new MemoryStream(Cadena.Length);

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform encript = des.CreateEncryptor(key, codeIV);
CryptoStream cs = new CryptoStream(fout, encript,
CryptoStreamMode.Write);
cs.Write(ASCIIEncoding.ASCII.GetBytes(Cadena), 0, Cadena.Length);

fout.Read(bufferSalida, 0, (int) fout.Length);
return this.ByteArrayToString(bufferSalida);
}

el método KeyByteArray lo utilizo para inicializar los valores de la llave y
del vector de inicialización en valores válidos para el algoritmo Des. Aún
así no funcionaalguna idea.
Respuesta Responder a este mensaje
#4 Geni
26/07/2003 - 07:16 | Informe spam
hola, bueno no me había percatado que la salida que habías mencionado era
atravéz de fout.GetBuffer(). De modo que modifiqué el código y al parecer ya
me devuelve la salida esperada. Digo al parecer porque el descifrado no se
produce, de modo que no puedo saber si los métodos son correctos o no. El
código para cifrado es este:

MemoryStream fout = new MemoryStream(128);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform encript = des.CreateEncryptor();
CryptoStream cs = new CryptoStream(fout, encript, CryptoStreamMode.Write);
cs.Write(ASCIIEncoding.ASCII.GetBytes(Cadena), 0, Cadena.Length);

return this.ByteArrayToString(fout.GetBuffer());

aparentemente funciona bien, pero usando los siguientes métodos de
descifrado no puedo obtener ningun dato...

MemoryStream fout = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(Cadena));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform desencript = des.CreateDecryptor();
CryptoStream cs = new CryptoStream(fout, desencript, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
return sr.ReadToEnd();

o este:

MemoryStream fout = new MemoryStream(128);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform desencript = des.CreateDecryptor();
CryptoStream cs = new CryptoStream(fout, desencript,
CryptoStreamMode.Write);
cs.Write(ASCIIEncoding.ASCII.GetBytes(Cadena), 0, Cadena.Length);

return this.ByteArrayToString(fout.GetBuffer());

alguna idea...muchas gracias por la ayuda...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida