Hemligt meddelande đŸ€«

🧠 Syfte

Kom igen, vem har inte drömt om att skicka hemliga meddelanden? Det hĂ€r kodexemplet visar hur du kan “gömma” en text i en bild – en riktig spiongrej! Vi ska anvĂ€nda lite enkel C-Sharp-magi för att bĂ„de gömma och avslöja budskapet. Det Ă€r perfekt för att öva pĂ„ grundlĂ€ggande C-Sharp-koncept som arrayer och loopar. LĂ„ter kul, va?

đŸ’» Koden


using System;
using System.Drawing;
using System.Drawing.Imaging;

public class SecretMessage
{
    public static void HideMessage(string message, string imagePath, string outputPath)
    {
        // LĂ€s in bilden
        Bitmap image = new Bitmap(imagePath);
        int width = image.Width;
        int height = image.Height;

        // Konvertera meddelandet till en byte-array
        byte[] messageBytes = System.Text.Encoding.UTF8.GetBytes(message);
        int messageLength = messageBytes.Length;

        // Kontrollera om bilden Àr tillrÀckligt stor för att gömma meddelandet
        if (width * height * 3 < messageLength * 8) {
            Console.WriteLine("Bilden Àr för liten för det hÀr meddelandet!");
            return;
        }

        // Göm meddelandet i bildens pixeldata
        int index = 0;
        for (int y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                Color pixel = image.GetPixel(x, y);
                if (index < messageLength * 8)
                {
                    // Ändra minst signifikanta biten i varje fĂ€rgknalle
                    int newR = pixel.R - (pixel.R % 2) + ((messageBytes[index / 8] >> (index % 8)) & 1);
                    int newG = pixel.G - (pixel.G % 2) + (((messageBytes[index / 8] >> (index % 8)) & 1));
                    int newB = pixel.B - (pixel.B % 2) + (((messageBytes[index / 8] >> (index % 8)) & 1));
                    image.SetPixel(x, y, Color.FromArgb(newR, newG, newB));
                    index++;
                }
            }
        }

        // Spara den modifierade bilden
        image.Save(outputPath, ImageFormat.Bmp);
        Console.WriteLine("Meddelandet Àr gömt!");
    }


    public static string RevealMessage(string imagePath)
    {
        // LĂ€s in bilden
        Bitmap image = new Bitmap(imagePath);
        int width = image.Width;
        int height = image.Height;
        string message = "";

        // Extrahera meddelandet frÄn bildens pixeldata
        for (int y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                Color pixel = image.GetPixel(x, y);
                message += ((pixel.R % 2) * 128 + (pixel.G % 2) * 64 + (pixel.B % 2) * 32).ToString();
            }
        }

        // Konvertera binÀrstrÀngen till en textstrÀng
        string binaryString = message;
        byte[] decodedBytes = new byte[binaryString.Length / 8];
        for (int i = 0; i < decodedBytes.Length; i++)
        {
            decodedBytes[i] = Convert.ToByte(binaryString.Substring(i * 8, 8), 2);
        }
        return System.Text.Encoding.UTF8.GetString(decodedBytes);
    }

    public static void Main(string[] args)
    {
        // Exempel pÄ hur man anvÀnder funktionerna
        HideMessage("Detta Àr ett hemligt meddelande!", "input.bmp", "output.bmp"); //Input och output bild krÀvs
        string revealedMessage = RevealMessage("output.bmp");
        Console.WriteLine($"Avslöjat meddelande: {revealedMessage}");
    }
}

📋 Förklaring

TÀnk dig bilden som en massa smÄ lÄdor (pixlar). I varje lÄda finns tre fÀrger (röd, grön, blÄ). Vi Àndrar den allra minsta detaljen i fÀrgen (den lÀgsta biten) för att gömma en bit av vÄrt meddelande. Det Àr som att skriva med osynligt blÀck!

HideMessage-funktionen gör just det: den tar ditt meddelande, konverterar det till binÀrkod (nollor och ettor), och sen gömmer den dessa nollor och ettor i bildens pixlar. Det Àr en bit i taget.

RevealMessage gör precis tvÀrtom. Den lÀser bilden, plockar ut de gömda bitarna, och sÀtter ihop dem igen till ditt hemliga meddelande. Magi!

Viktigt: Du behöver en input.bmp-bild för att koden ska fungera. Skapa en enkel bildfil med det namnet i samma katalog som din .cs fil.

graph TD A[Meddelande] --> B(Konvertera till binÀr); B --> C{Göm i bildens pixlar}; C --> D[Modifierad bild]; E[Modifierad bild] --> F(Extrahera binÀr frÄn pixlar); F --> G(Konvertera till text); G --> H[Avslöjat meddelande];

Den hÀr bilden visar arbetsflödet. Först gömmer vi meddelandet i bilden, sen extraherar vi det.

Enkelt, eller hur? Men kom ihĂ„g – ju större meddelande, desto större bild behöver du!

⚠ Vanliga misstag

  • Felaktig bildformat: Koden fungerar bĂ€st med BMP-bilder. Andra format kan ge problem.
  • För litet bild: Om bilden Ă€r för liten jĂ€mfört med meddelandet, kommer meddelandet inte att kunna gömmas helt. Koden skriver ut ett felmeddelande i detta fall.
  • Glömma att spara: Se till att spara den modifierade bilden efter att du gömt meddelandet.

📚 Sammanfattning

Vi har lÀrt oss att gömma och avslöja hemliga meddelanden i bilder med hjÀlp av C-Sharp! Det var lite knepigt, men superhÀftigt!

😄 Obligatoriskt pappaskĂ€mt

Vad kallar man en programmerare som inte kan sova? En bug hunter!

Du klarar det hÀr! Koda vilt!


Upp

Upp


Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rÀttigheter förbehÄllna.
Du fÄr anvÀnda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du fÄr inte anvÀnda detta verk för kommersiella ÀndamÄl utan tillstÄnd frÄn upphovsmannen.