Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad : Ingeniera
Escuela : Computacin
Asignatura: Programacin III
Tema: CIFRADO.
Objetivo
Introduccin
Cuando dos partes remotas intercambian datos a travs de un canal inseguro (como por
ejemplo), ambas partes deben garantizar que los datos comunicados:
IV (Vector de inicializacin).
No se puede encriptar sin l. Es de 16 bytes de longitud para el algoritmo de
Rijndael. No es una 2 llave, por lo tanto, no se trata de una dato que haya que
esconder, nicamente hay que considerar que hay que usar el mismo IV para
encriptar/desencriptar un mensaje concreto. Un error comn es utilizar el mismo
vector de inicializacin en todas las encriptaciones. Utilizar siempre un mismo IV
es equivalente en seguridad a no utilizar encriptacin.
Key (llave).
Esta es la principal informacin para encriptar / desencriptar en los algoritmos
simtricos. Toda la seguridad de un sistema simtrico depende de dnde est
esta llave, cmo est compuesta y quin tiene acceso. ste es un dato que debe
conocerse nica y exclusivamente por los interlocutores de la comunicacin. De
otra forma, la seguridad en la comunicacin se vera comprometida.
Ejemplo de funcionamiento.
Ana y Jos acuerdan utilizar un algoritmo en particular con una clave y vector de
inicializacin concretos.
Ana redacta un mensaje y cifra el texto usando la clave y el vector de inicializacin y
se lo enva a Jos por Internet.
Jos recibe el texto cifrado y lo descifra utilizando la clave y el vector acordados
anteriormente.
En esta gua se describe cmo utilizar las clases de cifrado que proporciona Microsoft
.NET Framework para cifrar un archivo de texto en un estado ilegible y descifrar despus
ese archivo para devolverlo a su estado original.
El espacio de nombre System.Security.Cryptographic de Microsoft .NET Framework
proporciona diversas herramientas para ayudarle con el cifrado y el descifrado. La clase
CryptoStream es una de las muchas clases que se proporcionan. La clase CryptoStream
est para cifrar o descifrar el contenido a medida que se transmite en secuencias a un
archivo.
Materiales y equipo
Procedimiento
Ejercicio 1:
Cree un proyecto modo consola en C# .NET. Con el nombre de encryption.
Ejercicio 2:
En el escritorio cree una carpeta de manera que coincida con la ruta dirPruebas. A
continuacin cree un proyecto modo consola en C# .NET. Con el nombre de
cifradoRSA_CS.
using
using
using
using
System;
System.Text;
System.Security.Cryptography;
System.IO;
namespace cifradoRSA_CS
{
class Program
{
private static string dirPruebas = @"C:\Users\usuario\Desktop\Guia de
Cifrado\cifradoRSA_CS\RSA cripto";
private
static
string
ficPruebas = Path.Combine(dirPruebas,
"MisClaves_CS.xml");
static void Main()
{
// Cifrar y descifrar con RSA
Console.Title = "Cifrar y descifrar con RSA";
// Si no existe el fichero de claves
if (File.Exists(ficPruebas) == false)
{
crearXMLclaves(ficPruebas);
}
string xmlKeys = clavesXML(ficPruebas);
byte[] datos = cifrar("Hola RSA C#", xmlKeys);
string res = descifrar(datos, xmlKeys);
Console.WriteLine(res);
Console.ReadLine();
}
private static void crearXMLclaves(string ficPruebas)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string xmlKey = rsa.ToXmlString(true);
// Si no existe el directorio, crearlo
string dirPruebas = Path.GetDirectoryName(ficPruebas);
if (Directory.Exists(dirPruebas) == false)
{
Directory.CreateDirectory(dirPruebas);
}
Ejemplo 2:
Antes de crear la aplicacin debe tomar en cuenta la ruta donde ser guardada (ver parte
final del cdigo) y deber crear los tres archivos .txt a utilizar (Mydata.txt, Encryted.txt,
Decrypt.txt) Posterior a ello cree un proyecto modo consola en C# .NET. Con el nombre
de CSEncryptDecrypt
using
using
using
using
using
using
System;
System.IO;
System.Security;
System.Security.Cryptography;
System.Runtime.InteropServices;
System.Text;
namespace CSEncryptDecrypt
{ class class1
{
// Llamar a esta funcin para quitar la clave de la memoria despus de su
uso por seguridad
[System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint =
"RtlZeroMemory")]
public static extern bool ZeroMemory(IntPtr Destination, int Length);
// Funcin para generar una clave de 64 bits.
static string GenerateKey()
{
// Crear una instancia del algoritmo simtrico. La clave y el IV se generan
automticamente.
DESCryptoServiceProvider desCrypto =
(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
// Utilizar la clave generada automticamente para el cifrado.
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
static void EncryptFile(string sInputFilename, string sOutputFilename,
string sKey)
{
FileStream fsInput = new FileStream(sInputFilename, FileMode.Open,
FileAccess.Read);
FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create,
FileAccess.Write);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt,
CryptoStreamMode.Write);
byte[] bytearrayinput = new byte[fsInput.Length];
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
}
static void DecryptFile(string sInputFilename, string sOutputFilename,
string sKey)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
//Se necesita una clave de 64 bits y un IV para este proveedor.
//Establecer la clave secreta para el algoritmo DES.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
//Establecer el vector de inicializacin.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
//Crear una secuencia de archivo para volver a leer el archivo cifrado.
FileStream fsread = new FileStream(sInputFilename, FileMode.Open,
FileAccess.Read);
Anlisis de resultados
Investigacin complementaria.
Referencia.
http://support.microsoft.com/kb/307010/es
http://copstone.com/2010/03/encriptacion-en-c-sharp/
Hoja de cotejo:
11
Mquina No:
Docente:
GL:
Fecha:
EVALUACION
%
CONOCIMIENTO
40
APLICACIN
DEL
CONOCIMIENTO
40
ACTITUD
20
TOTAL
100%
1-4
5-7
8-10
Nota