public Bitmap Encode(RichTextBox Ciphertext, PictureBox Stego_Image, Button SaveStego) { Bitmap new_image = new Bitmap(Image_Processing);; if (Key != "") { //1. Encryption Part int[] Plain_index = Convert_String_to_IntArray(Plaintext); //Console.WriteLine("===Plaintext in ASCII==="); //Printarray(Plain_index); int[] Key_index = Convert_String_to_IntArray(Key); //Console.WriteLine("\n===Key in ASCII==="); //Printarray(Key_index); int[] Key_Stream = Get_KeyStream(Plain_index.Length, Key_index); int IV = Setting[3]; int Shift_Bit = Setting[2]; int[] Temp = Encryption(Plain_index, Key_Stream, Setting[3], Shift_Bit); //Console.WriteLine("\n===Ciphertext in ASCII==="); //Printarray(Temp); Ciphertext.Text = Convert_IntArray_to_String(Temp); //2. Pixel Random Part int Width = Image_Processing.Width; int Height = Image_Processing.Height; int A = 1; int C = Setting[0]; int M = Width * Height; int Seed = Setting[1]; int Piksel_needed = Temp.Length * 2; Controller_LCG LCG = new Controller_LCG(Width, Height); int[,] Pixel_Random = LCG.Get_Pixel_Random(A, C, M, Seed, Piksel_needed); //PrintArray2d(Pixel_Random); // //3. Part Encoding int Counter_Text = 0; int Counter_Row1 = 0; int Counter_Row2 = 1; int x1, y1, x2, y2; int r1, g1, b1, a1, r2, g2, b2, a2; while (Counter_Row1 < Piksel_needed) { x1 = Pixel_Random[Counter_Row1, 0]; y1 = Pixel_Random[Counter_Row1, 1]; x2 = Pixel_Random[Counter_Row2, 0]; y2 = Pixel_Random[Counter_Row2, 1]; Color p = this.Image_Processing.GetPixel(x1, y1); Color p2 = this.Image_Processing.GetPixel(x2, y2); a1 = p.A; r1 = p.R; g1 = p.G; b1 = p.B; a2 = p2.A; r2 = p2.R; g2 = p2.G; b2 = p2.B; //Console.WriteLine("Pixel1 = " + a1 + "," + r1 + "," + g1 + "," + b1); //Console.WriteLine("Pixel1 = " + a2 + "," + r2 + "," + g2 + "," + b2); int[] bytes = Decimal_to_Binary(Temp[Counter_Text]); int bit0 = bytes[0]; int bit1 = bytes[1]; int bit2 = bytes[2]; int bit3 = bytes[3]; int bit4 = bytes[4]; int bit5 = bytes[5]; int bit6 = bytes[6]; int bit7 = bytes[7]; //Console.WriteLine("Index-" + Counter_Text + " = " + bit0 + "," + bit1 + "," + bit2 + "," + bit3 + "," + bit4 + "," + bit5 + "," + bit6 +","+bit7); a1 = GetLSB(a1, bit0); r1 = GetLSB(r1, bit1); g1 = GetLSB(g1, bit2); b1 = GetLSB(b1, bit3); a2 = GetLSB(a2, bit4); r2 = GetLSB(r2, bit5); g2 = GetLSB(g2, bit6); b2 = GetLSB(b2, bit7); //Console.WriteLine("New Image = " + a1 + "," + r1 + "," + g1 + "," + b1+ ", "+ a2 + "," + r2 + "," + g2 + "," + b2); new_image.SetPixel(x1, y1, Color.FromArgb(a1, r1, g1, b1)); new_image.SetPixel(x2, y2, Color.FromArgb(a2, r2, g2, b2)); //Color p3 = new_image.GetPixel(x1, y1); //Color p4 = new_image.GetPixel(x2, y2); //Console.WriteLine("New Image = " + p3.A + "," + p3.R + "," + p3.G + "," + p3.B + ", " + p4.A + "," + p4.R + "," + p4.G + "," + p4.B); Counter_Text += 1; Counter_Row1 += 2; Counter_Row2 += 2; } Stego_Image.Image = new_image; SaveStego.Enabled = true; MessageBox.Show("Done", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { SaveStego.Enabled = false; MessageBox.Show("Key Is Empty", "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop); } return(new_image); }
public void Decode(RichTextBox Ciphertext, RichTextBox Plaintext, Button SaveText) { if (Key != "") { //1. Get Pixel Random First int Width = Stego.Width; int Height = Stego.Height; int A = 1; int C = Setting[0]; int M = Width * Height; int Seed = Setting[1]; int Piksel_needed = NCharacter * 2; Controller_LCG LCG = new Controller_LCG(Width, Height); int[,] Pixel_Random = LCG.Get_Pixel_Random(A, C, M, Seed, Piksel_needed); //2. Part Decode int Counter_Text = 0; int Counter_Row1 = 0; int Counter_Row2 = 1; int x1, y1, x2, y2; int r1, g1, b1, a1, r2, g2, b2, a2; int[] Plain_Index = new int[NCharacter]; while (Counter_Row1 < Piksel_needed) { x1 = Pixel_Random[Counter_Row1, 0]; y1 = Pixel_Random[Counter_Row1, 1]; x2 = Pixel_Random[Counter_Row2, 0]; y2 = Pixel_Random[Counter_Row2, 1]; Color p = this.Stego.GetPixel(x1, y1); Color p2 = this.Stego.GetPixel(x2, y2); a1 = p.A; r1 = p.R; g1 = p.G; b1 = p.B; a2 = p2.A; r2 = p2.R; g2 = p2.G; b2 = p2.B; //Console.WriteLine("Pixel1 = " + a1 + "," + r1 + "," + g1 + "," + b1); //Console.WriteLine("Pixel2 = " + a2 + "," + r2 + "," + g2 + "," + b2); int[] bytes = new int[8]; bytes[0] = GetLSB2(a1); bytes[1] = GetLSB2(r1); bytes[2] = GetLSB2(g1); bytes[3] = GetLSB2(b1); bytes[4] = GetLSB2(a2); bytes[5] = GetLSB2(r2); bytes[6] = GetLSB2(g2); bytes[7] = GetLSB2(b2); Plain_Index[Counter_Text] = Binary_to_Decimal(bytes); // Console.WriteLine("Index-" + Counter_Text + " = " + Binary_to_Decimal(bytes)); Counter_Text += 1; Counter_Row1 += 2; Counter_Row2 += 2; } Ciphertext.Text = Convert_IntArray_to_String(Plain_Index); int[] Key_Index = Convert_String_to_IntArray(Key); int IV = Setting[3]; int shift_bit = Setting[2]; int[] Key_Stream = Get_KeyStream(Plain_Index.Length, Key_Index); int[] Temp2 = Decryption(Plain_Index, Key_Stream, IV, shift_bit); string plain = Convert_IntArray_to_String(Temp2); Plaintext.Text = plain; SaveText.Enabled = true; MessageBox.Show("Done", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { SaveText.Enabled = false; MessageBox.Show("Key Is Empty", "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }