¿Qué es el algoritmo de cifrado simétrico BlowFish?
Algoritmo de cifrado simétrico Introducción:
Algoritmo de cifrado simétrico El algoritmo de cifrado simétrico es un algoritmo de cifrado anterior con tecnología madura. En el algoritmo de cifrado simétrico, el remitente de datos procesa el texto sin formato (datos originales) y la clave de cifrado junto con un algoritmo de cifrado especial, convirtiéndolos en texto cifrado cifrado complejo y enviándolos. Después de que el destinatario recibe el texto cifrado, si quiere descifrar el texto original, debe utilizar la clave utilizada para el cifrado y el algoritmo inverso del mismo algoritmo para descifrar el texto cifrado y restaurarlo a texto sin formato legible. En el algoritmo de cifrado simétrico, solo se utiliza una clave. Tanto el remitente como el receptor utilizan esta clave para cifrar y descifrar los datos. Esto requiere que el descifrador conozca la clave de cifrado de antemano.
Características:
Las características del algoritmo de cifrado simétrico son algoritmo abierto, pequeña cantidad de cálculo, velocidad de cifrado rápida y alta eficiencia de cifrado.
La desventaja es que ambas partes de la transacción utilizan la misma clave, por lo que no se puede garantizar la seguridad. Además, cada vez que cada par de usuarios utiliza un algoritmo de cifrado simétrico, necesitan utilizar una clave única que los demás desconocen. Esto aumentará exponencialmente el número de claves que poseen tanto los remitentes como los receptores, y la gestión de claves se convierte en una carga para ellos. usuarios. Los algoritmos de cifrado simétrico son difíciles de usar en sistemas de redes distribuidas, principalmente porque la administración de claves es difícil y el costo de uso es alto. En comparación con los algoritmos de cifrado de clave pública, los algoritmos de cifrado simétrico pueden proporcionar cifrado y autenticación, pero carecen de la función de firma, lo que reduce el alcance de su uso. Los algoritmos de cifrado simétrico ampliamente utilizados en sistemas de redes privadas de computadoras incluyen DES e IDEA. AES, defendido por la Oficina Nacional Estadounidense de Estándares, pronto reemplazará a DES como nuevo estándar.
Algoritmos específicos:
Algoritmo 3DES, Algoritmo Blowfish, Algoritmo RC5. Algoritmo de cifrado simétrico: principios y aplicaciones Las ventajas de los algoritmos de cifrado simétrico radican en la alta velocidad de cifrado y descifrado y la dificultad de descifrar cuando se utilizan claves largas. Suponiendo que dos usuarios necesitan utilizar un método de cifrado simétrico para cifrar y luego intercambiar datos, los usuarios necesitan al menos 2 claves y las intercambian. Si hay n usuarios en la empresa, toda la empresa necesitará n×(n-1) claves. La generación y distribución de claves se convertirá en una pesadilla para los departamentos de información empresarial. La seguridad del algoritmo de cifrado simétrico depende del almacenamiento de la clave de cifrado, pero es imposible exigir que todos los miembros de la empresa que poseen la clave mantengan el secreto. Por lo general, filtran la clave de forma intencionada o no, si es la clave utilizada por. El intruso obtiene al usuario y el intruso puede leer todos los documentos cifrados con la clave del usuario. Si toda la empresa solo utiliza una clave de cifrado, la confidencialidad de los documentos de toda la empresa estará fuera de discusión.
DESCryptoServiceProvider
RC2CryptoServiceProvider
RijndaelManaged
TripleDESCryptoServiceProvider
//Ejemplo de archivo de texto cifrado (RijndaelManaged)
byte[ ] clave = { 24, 55, 102,24, 98, 26, 67, 29, 84, 19, 37, 118, 104, 85, 121, 27, 93, 86, 24, 55, 102, 24,98, 26, 67, 29, 9, 2, 49, 69, 73, 92 };
byte[] IV ={ 22, 56, 82, 77, 84, 31, 74, 24,55, 102, 24, 98, 26, 67, 29, 99 };
RijndaelManaged myRijndael = new RijndaelManaged();
FileStream fsOut = File.Open(strOutName, FileMode.Create, FileAccess.Write);//strOutName nombre de archivo y ruta FileStream fsIn = File.Open(strPath, FileMode.Open,FileAccess.Read);
CryptoStream csDecrypt=new CryptoStream(fsOut,myRijndael.CreateEncryptor(key) , IV),CryptoStreamMode.Write);//Leer texto cifrado
BinaryReader br = new BinaryReader(fsIn);
csDecrypt.Write(br.ReadBytes((int)fsIn. Longitud),0, (int)fsIn.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
fsIn.Close( );
fsOut.Close();
//Descifrar archivo
byte[] clave = { 24, 55, 102, 24, 98, 26 , 67, 29, 84, 19, 37, 118,104, 85, 121, 27, 93, 86, 24, 55, 102, 24, 98, 26, 67, 29, 9, 2, 49, 69, 73, 92 };
byte[] IV ={ 22, 56, 82, 77, 84, 31, 74, 24, 55, 102, 24, 98, 26,67, 29, 99 }; p> p>
RijndaelManaged myRijndael = new RijndaelManaged();
FileStream fsOut = File.Open(strPath, FileMode.Open, FileAccess.Read);
CryptoStream csDecrypt = nuevo CryptoStream (fsOut, myRijndael.CreateDecryptor(clave,IV), CryptoStreamMode.Read);
StreamReader sr = nuevo StreamReader(cs
Decrypt);//Lee el archivo
StreamWriter sw = new StreamWriter(strInName);//Escribe el archivo descifrado en un archivo nuevo
sw.Write(sr.ReadToEnd () );
sw.Flush();
sw.Close();
sr.Close();f
sOut .Close();
Usar cifrado de imágenes (RC2CryptoServiceProvider)
FileStreamfsPic = new FileStream(pictureBox1.ImageLocation, FileMode.Open, FileAccess.Read);
//Secuencia de archivos cifrados (textBox1.Text es el nombre y la ruta del archivo)
FileStream fsText = new FileStream(textBox1.Text, FileMode.Open,FileAccess.Read);
byte [] bykey = nuevo byte[16]; //Inicialización
Clave IVbyte[] byIv = nuevo byte[8];
fsPic.Read(bykey, 0, 16);
fsPic.Read(byIv, 0, 8);
RC2CryptoServiceProvider desc = newRC2CryptoServiceProvider();//desc para cifrado
BinaryReader br = new BinaryReader ( fsText); //Lee el contenido del archivo que se va a cifrar
FileStream fsOut = File.Open(strLinPath,FileMode.Create, FileAccess.Write); // ruta del archivo cifrado temporal strLinPath CryptoStream cs = new CryptoStream(fsOut, desc.CreateEncryptor(bykey,byIv), CryptoStreamMode.Write);//Escribir archivo cifrado temporal
cs.Write(br.ReadBytes((int)fsText.Length), 0, (int)fsText.Length);//Escribir flujo cifrado
cs.FlushFinalBlock();
cs.Flush();
cs .Close( );
fsPic.Close();
fsText.Close();
fsOut.Close();
Descifrar con imágenes
FileStream fsPic = new FileStream(pictureBox1.ImageLocation, FileMode.Open, FileAccess.Read); //Secuencia de imágenes FileStream fsOut = File.Open(textBox1.Text,FileMode.Open, FileAccess .Read) ;//Descifrar flujo de archivos
byte[] bykey = nuevo byte[16]; //Inicialización
Clave IVbyte[] byIv = nuevo byte[8];
fsPic.Read(bykey, 0, 16);
fsPic.Read(byIv, 0,
8);
string strPath = textBox1.Text;//Ruta del archivo cifrado
int intLent = strPath.LastIndexOf("\\")+ 1;
int intLong = strPath.Length;
string strName = strPath.Substring(intLent, intLong - intLent);//El nombre del archivo a cifrar
string strLinPath = "C: \\"+ strName;//Ruta del archivo temporalmente descifrado
FileStream fs = new FileStream(strLinPath, FileMode.Create,FileAccess.Write);
RC2CryptoServiceProvider desc = newRC2CryptoServiceProvider (); //desc para descifrar
CryptoStream csDecrypt = new CryptoStream(fsOut, desc.CreateDecryptor(bykey,byIv), CryptoStreamMode.Read);
//Leer el archivo cifrado
BinaryReader sr = new BinaryReader(csDecrypt);//Lee el contenido del archivo de la secuencia que se va a cifrar
BinaryWriter sw = new BinaryWriter(fs);//Escribe la secuencia descifrada
sw.Write(sr.ReadBytes(Convert.ToInt32(fsOut.Length)));
//sw.Flush();
sw. Cerrar();
sr.Close();
fs.Close();
fsOut.Close();
fsPic.Close( );
csDecrypt.Flush();
File.Delete(textBox1.Text.TrimEnd());//Eliminar el archivo original
File.Copy (strLinPath, textBox1.Text);//Copiar archivos cifrados