¿Ver copia simple en el portapapeles?
//espacio de nombres
usando Sistema;
utilizando System.Security.Cryptography;
usando System.IO;
usando System.Text;
//método
//método de cifrado
cadena pública Encrypt (cadena pToEncrypt, cadena sKey)
{
DESCryptoServiceProvider des = nuevo DESCryptoServiceProvider();
//Pon la cadena en la matriz de bytes
//Cambié la codificación UTF8 utilizada originalmente a codificación Unicode, pero no funciona.
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//Establece la clave y el desplazamiento del objeto cifrado
// El texto original utiliza el método GetBytes del método ASCIIEncoding.ASCII.
// Hace necesario ingresar texto en inglés al ingresar la contraseña
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = nuevo MemoryStream();
CryptoStream cs = nuevo CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
//Escribe la matriz de bytes en el flujo criptográfico
//(Terminará en el flujo de memoria)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Recupera los datos del flujo de memoria y los coloca en una cadena
StringBuilder ret = nuevo StringBuilder();
foreach(byte b en ms.ToArray())
{
//Formatear como hexadecimal
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
devolver ret.ToString();
}
//método de descifrado
cadena pública Decrypt (cadena pToDecrypt, cadena sKey)
{
DESCryptoServiceProvider des = nuevo DESCryptoServiceProvider();
//Coloca la cadena de entrada en la matriz de bytes
byte[] inputByteArray = nuevo byte[pToDecrypt.Length / 2];
para(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
//Establece la clave y el desplazamiento del objeto cifrado. Este valor es importante y no se puede modificar.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = nuevo MemoryStream();
CryptoStream cs = nuevo CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//Vaciar los datos a través del flujo criptográfico al flujo de memoria
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Recupera los datos descifrados del flujo de memoria
// Crea un objeto StringBuild. CreateDecrypt utiliza un objeto de secuencia y el texto descifrado debe convertirse en un objeto de secuencia.
StringBuilder ret = nuevo StringBuilder();
devolver System.Text.Encoding.Default.GetString(ms.ToArray());
}
//-------Código completado--------------------
//Espacio de nombres
usando Sistema;
utilizando System.Security.Cryptography;
usando System.IO;
usando System.Text;
//método
//método de cifrado
cadena pública Encrypt (cadena pToEncrypt, cadena sKey)
{
DESCryptoServiceProvider des = nuevo DESCryptoServiceProvider();
//Pon la cadena en la matriz de bytes
//Cambié la codificación UTF8 utilizada originalmente a codificación Unicode, pero no funciona.
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//Establece la clave y el desplazamiento del objeto cifrado
// El texto original utiliza el método GetBytes del método ASCIIEncoding.ASCII.
// Hace necesario ingresar texto en inglés al ingresar la contraseña
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = nuevo MemoryStream();
CryptoStream cs = nuevo CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
//Escribe la matriz de bytes en el flujo criptográfico
//(Terminará en el flujo de memoria)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Recupera los datos del flujo de memoria y los coloca en una cadena
StringBuilder ret = nuevo StringBuilder();
foreach(byte b en ms.ToArray())
{
//Formatear como hexadecimal
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
devolver ret.ToString();
}
//método de descifrado
cadena pública Decrypt (cadena pToDecrypt, cadena sKey)
{
DESCryptoServiceProvider des = nuevo DESCryptoServiceProvider();
//Coloca la cadena de entrada en la matriz de bytes
byte[] inputByteArray = nuevo byte[pToDecrypt.Length / 2];
para(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
//Establece la clave y el desplazamiento del objeto cifrado. Este valor es importante y no se puede modificar.
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = nuevo MemoryStream();
CryptoStream cs = nuevo CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//Vaciar los datos a través del flujo criptográfico al flujo de memoria
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Recupera los datos descifrados del flujo de memoria
// Crea un objeto StringBuild. CreateDecrypt utiliza un objeto de secuencia y el texto descifrado debe convertirse en un objeto de secuencia.
StringBuilder ret = nuevo StringBuilder();
devolver System.Text.Encoding.Default.GetString(ms.ToArray());
}
//------Código completado--------------------
Nota: Al ingresar la contraseña en sKey, debe usar caracteres en inglés, que distinguen entre mayúsculas y minúsculas, y el número de caracteres es 8, ni más ni menos, de lo contrario se producirá un error.
Utilizo Windows2000 Server .Net Framework SP3 y se utiliza con éxito en asp.net en VS.Net, ¡y el cifrado y descifrado son normales!