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