Hola a todos los del foro

. Investigando por la red consultando temas acerca de Encriptación y Desecriptación, y o sorpresa, me encontre varios ejemplos tanto en php como para visual basic pero yo necesito uno para c#

. De todos los que consulte decidi convertir el código de visual basic a c#, pero el problema que encontre con este tipo de ejemplos, es que no me permite encriptar caracteres especiales

como por ejemplo acentos, la letra ñ (que bonito el español

) entre otros #$%&/(
Ya que si encripto este tipo de caracteres al tratar de desencriptar aparecen totalmente alterados, con otro tipo de codigo que no se que sea.
Si me podrian ayudar a encontrar una solución a mi problema se los agradecere mucho.
Este es el código que encontre para realizar dicha tarea:
Código:
public static string EncryptString(string InputString, string SecretKey)
{
try{
CipherMode CyphMode = CipherMode.ECB;
TripleDESCryptoServiceProvider Des = new TripleDESCryptoServiceProvider();
Byte[] InputbyteArray = Encoding.UTF8.GetBytes(InputString);
MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
Des.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(SecretKey));
Des.Mode = CyphMode;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,Des.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(InputbyteArray,0,InputbyteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
Byte[] b = ms.ToArray();
ms.Close();
//int bs = b.GetUpperBound(0);
for(int i=0;i < b.Length ; i++)
{
//Formato hexadecimal
ret.AppendFormat("{0:X2}",b[i]);
}
return ret.ToString();
}
catch(Exception ex)
{
Console.Write(ex);
return "";
}
}
public static string DecryptString(string InputString, string SecretKey)
{
try{
if(InputString.Equals(String.Empty))
return "";
else
{
CipherMode CyphMode = CipherMode.ECB;
TripleDESCryptoServiceProvider Des = new TripleDESCryptoServiceProvider();
byte[] byteArray = new byte[InputString.Length / 2 ];
MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
Des.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(SecretKey));
Des.Mode = CyphMode;
for(int i =0; i < byteArray.Length ; i++)
{
Int32 Ij = Convert.ToInt32(InputString.Substring(i*2,2),16);
ByteConverter Bt = new ByteConverter();
byteArray[i] = new byte();
byteArray[i] = Convert.ToByte(Bt.ConvertTo(Ij,typeof(byte)));
}
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,Des.CreateDecryptor(),CryptoStreamMode.Write);
cs.Write(byteArray,0,byteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
Byte[] b = ms.ToArray();
ms.Close();
for(int j = 0 ; j< b.Length ; j++){
ret.Append(Convert.ToChar(b[j]));
}
return ret.ToString();
}
}
catch(Exception ex)
{
Console.Write(ex);
return "";
}
}
}