Cifrar Un Archivo BMP - Ejercicio De Programacion C# Sharp

Este ejercicio consiste en crear un programa que encripte y desencripte un archivo de imagen BMP cambiando la marca "BM" en los primeros dos bytes a "MB" y viceversa. Para ello, se debe utilizar el constructor avanzado de FileStream que permite leer y escribir de manera simultánea, lo que facilita el proceso de modificación de los bytes sin tener que cargar todo el archivo en memoria. Este tipo de operación es útil para comprender cómo se pueden manipular los archivos binarios y cómo implementar técnicas de cifrado sencillas. Además, es un ejercicio que refuerza el uso de FileStream para manejar archivos grandes de manera eficiente sin cargar todo el archivo a la memoria.

 Categoría

Administración de Archivos

 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#

 Copiar 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.

 Comparte este Ejercicio C# Sharp

 Más Ejercicios de Programacion C# Sharp de Administración de Archivos

¡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#.

  •  Conversor CSV

    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...

  •  Comparador de archivos

    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 ...

  •  Mostrar BPM en la consola

    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á...

  •  Ancho y alto de PCX

    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...

  •  Extraer texto de un archivo binario

    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. ...

  •  Conversor de C# a Pascal

    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...