Sigue el problema del cifrado...

28/07/2003 - 16:25 por Geni | Informe spam
Pues eso, aún no puedo detectar mi error para los métodos de cifrado que
estoy utilizando, el código es el siguiente
public string CifrarCadena(string Cadena)
{
MemoryStream fout = new MemoryStream(Cadena.Lenght);
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());
}

al parecer funciona bien, pero el decifrado jamás se produce, me envía un
error al leer CryptoStream. El código de ese método es este..

public string DecifrarCadena(string Cadena)
{
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); // Error //
return sr.ReadToEnd();
}

alguien tiene alguna idea u otra forma de realizar este tipo de
cifradomuchas gracias.
 

Leer las respuestas

#1 Hernan Foffani
29/07/2003 - 13:16 | Informe spam
Pues eso, aún no puedo detectar mi error para los métodos
de cifrado que estoy utilizando, el código es el siguiente

alguien tiene alguna idea u otra forma de realizar este
tipo de cifrado



siento no haber respondido antes. el codigo tenia varios
errores: faltaba definir la clave y el vector de
inicializacion!, tenia problemas con MemoryStream (ahora
ya lo manejo mejor), etc.

va el codigo de Cifra.cs, que incluye una clase de prueba
para ser usada con csUnit.

a mi me resulto un buen ejercicio. espero que a ti te
sirva.
suerte!

-Hernan

using System;
using System.Text;
using System.IO;
using System.Security.Cryptography;
using csUnit;

namespace foros {
/// <remarks>
/// clase para cifrar cadenas. usa el algoritmo DES
///
/// clave vector de inicializacion ambos de 64 bits.
/// </remarks>
public class Cifra {
// Usamos DES
private DESCryptoServiceProvider algoritmo = new
DESCryptoServiceProvider();

// clave
private byte[] m_Key = {1,2,3,4,5,6,7,8 };

// vector de inicializacion
private byte[] m_IV = {8,7,6,5,4,3,2,1};

/// <summary>
/// CifrarCadena recibe un string en claro y
devuelve otro
/// cifrado.
/// </summary>
public string CifrarCadena(string cadenaEnClaro) {
MemoryStream memStream = new MemoryStream
(cadenaEnClaro.Length * 2);
CryptoStream cifStream = new CryptoStream
(memStream,
algoritmo.CreateEncryptor(m_Key, m_IV),
CryptoStreamMode.Write);
byte[] bytesEnClaro =
Encoding.UTF8.GetBytes(cadenaEnClaro);
byte[] bytesEncriptados = null;
string textoEncriptado = null;

cifStream.Write(bytesEnClaro, 0,
bytesEnClaro.Length);
cifStream.FlushFinalBlock();

bytesEncriptados = new byte[memStream.Length];

memStream.Position = 0;
memStream.Read(bytesEncriptados, 0, (int)
memStream.Length);

cifStream.Close();

textoEncriptado = Convert.ToBase64String
(bytesEncriptados);
return textoEncriptado;
}

/// <summary>
/// DecifrarCadena recibe un string cifrado y
devuelve otro en claro.
/// </summary>
public string DecifrarCadena(string
cadenaEncriptada) {
byte[] bytesEncriptados =
Convert.FromBase64String(cadenaEncriptada);
byte[] bytesEnClaro = null;
string cadenaEnClaro = null;
MemoryStream memStream = new MemoryStream
(cadenaEncriptada.Length);
CryptoStream cifStream = new CryptoStream
(memStream,
algoritmo.CreateDecryptor(m_Key, m_IV),
CryptoStreamMode.Write);

cifStream.Write(bytesEncriptados, 0,
bytesEncriptados.Length);
cifStream.FlushFinalBlock();

bytesEnClaro = new byte[memStream.Length];

memStream.Position = 0;
memStream.Read(bytesEnClaro, 0, (int)
memStream.Length);

cifStream.Close();

cadenaEnClaro = Encoding.UTF8.GetString
(bytesEnClaro);
return cadenaEnClaro;
}
}


[TestFixture]
public class UnitTest {

Cifra c;

[SetUp]
public void CreaCrifra() {
c = new Cifra();
}

[Test]
public void PruebaCifra() {
string s = "Geni esta cifrando";
Assert.Equals(c.DecifrarCadena(c.CifrarCadena
(s)), s);
}
}
}

- fin Cifra.cs

Preguntas similares