Ejercicio
Cifrar Un Archivo BMP
Objectivo
Cree un programa para cifrar / descifrar un archivo de imagen BMP, cambiando la marca "BM" en los dos primeros bytes con MB y viceversa.
Utilice el constructor avanzado FileStream para permitir la lectura y escritura simultáneas.
Ejemplo Ejercicio C#
Mostrar Código C#
// Import necessary namespaces for file handling
using System; // Basic input/output operations
using System.IO; // FileStream for file reading and writing
class BMPEncryptDecrypt // Main class for the BMP encryption/decryption program
{
static void Main(string[] args) // Entry point of the program
{
// Check if the correct number of arguments (file name) is provided
if (args.Length != 1) // If no file argument is provided
{
Console.WriteLine("Usage: BMPEncryptDecrypt "); // Show usage instructions
return; // Exit the program if the arguments are incorrect
}
string fileName = args[0]; // Get the file name from the command line argument
// Check if the file exists
if (!File.Exists(fileName)) // If the file does not exist
{
Console.WriteLine("Error: The file does not exist."); // Inform the user about the missing file
return; // Exit the program if the file is missing
}
try
{
// Open the BMP file for both reading and writing using FileStream
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite)) // Open the file in read-write mode
{
byte[] buffer = new byte[2]; // Buffer to store the first two bytes of the BMP file
// Read the first two bytes to check if they are "BM" (0x42, 0x4D)
int bytesRead = fileStream.Read(buffer, 0, 2); // Read the first two bytes
// If the file does not have enough bytes, show an error
if (bytesRead < 2)
{
Console.WriteLine("Error: The file is too small to be a valid BMP file.");
return; // Exit the program if the file is too small
}
// Check if the first two bytes are "BM" (0x42, 0x4D)
if (buffer[0] == 0x42 && buffer[1] == 0x4D) // If the file starts with "BM"
{
Console.WriteLine("Encrypting file..."); // Inform the user that the file will be encrypted
// Change the first two bytes from "BM" to "MB" (0x4D, 0x42)
buffer[0] = 0x4D; // Change 'B' to 'M'
buffer[1] = 0x42; // Change 'M' to 'B'
fileStream.Seek(0, SeekOrigin.Begin); // Move the file pointer to the start of the file
fileStream.Write(buffer, 0, 2); // Write the modified bytes back to the file
Console.WriteLine("File encrypted."); // Notify the user that the encryption is done
}
else if (buffer[0] == 0x4D && buffer[1] == 0x42) // If the file starts with "MB"
{
Console.WriteLine("Decrypting file..."); // Inform the user that the file will be decrypted
// Change the first two bytes from "MB" to "BM" (0x42, 0x4D)
buffer[0] = 0x42; // Change 'M' to 'B'
buffer[1] = 0x4D; // Change 'B' to 'M'
fileStream.Seek(0, SeekOrigin.Begin); // Move the file pointer to the start of the file
fileStream.Write(buffer, 0, 2); // Write the modified bytes back to the file
Console.WriteLine("File decrypted."); // Notify the user that the decryption is done
}
else
{
Console.WriteLine("Error: The file does not appear to be a valid BMP file."); // Inform the user if the file is not a valid BMP
}
}
}
catch (Exception ex) // Catch any exceptions that occur during file handling
{
Console.WriteLine($"An error occurred: {ex.Message}"); // Display the error message
}
}
}
Salida
Run the program on a BMP file:
BMPEncryptDecrypt example.bmp
If the file starts with the "BM" header (0x42 0x4D), the program will modify the header to "MB" (0x4D 0x42). The program will output:
Encrypting file...
File encrypted.
Código de Ejemplo Copiado!
Comparte este Ejercicio C# Sharp
¡Explora nuestro conjunto de ejercicios de programación C# Sharp! Estos ejercicios, diseñados específicamente para principiantes, te ayudarán a desarrollar una sólida comprensión de los conceptos básicos de C#. Desde variables y tipos de datos hasta estructuras de control y funciones simples, cada ejercicio está diseñado para desafiarte de manera gradual a medida que adquieres confianza en la codificación en C#.
Este ejercicio consiste en crear un programa que lea un archivo CSV con cuatro bloques de datos separados por comas (tres de texto y uno numérico) y genere un archivo de tex...
Este ejercicio consiste en crear un programa en C# que determine si dos archivos (de cualquier tipo) son idénticos, es decir, si tienen el mismo contenido. El ...
Este ejercicio consiste en crear un programa en C# que decodifique un archivo de imagen en formato Netpbm (en particular, el formato P1, que es para imá...
Este ejercicio consiste en crear un programa en C# que verifique si un archivo es una imagen en formato PCX y, si es así, extraiga y muestre las dimensiones (a...
Este ejercicio consiste en crear un programa en C# que extraiga solo los caracteres alfabéticos contenidos en un archivo binario y los volque en un archivo separado. ...
Este ejercicio consiste en crear un programa en C# que convierta programas simples en C# a su equivalente en el lenguaje Pascal. El programa debe leer u...