Example #1
0
        public static Bitmap kodowanie(string text, Bitmap bmp, string indeks, int zapis, int xor, bool xor_aktywacja)
        {
            Color pixel;
            Pixel Bitmap = new Pixel(bmp);

            Bitmap.LockBits();
            int licznik_multi = 0;


            string t      = text;
            long   zakres = t.Length * (zapis + 1);
            int    licz   = 0;
            int    licz2  = 0;


            int[]    value  = new int[text.Length];
            string[] binary = new string[text.Length];
            int      licz_a = 0;

            string[] znak = new string[t.Length];
            string[] test = new string[t.Length];

            char[]   wiadomosc   = new char[text.Length];
            string[] temp_binary = new string[binary.Length];
            string   ilosc_bitow = Convert.ToString(t.Length, 2);
            int      l           = 0;



            for (int j = (Bitmap.szerokosc - 1); j > (Bitmap.szerokosc - 1) - ilosc_bitow.Length; j--)
            {
                pixel = Bitmap.GetPixel(Bitmap.wysokosc - 1, j);

                int lsb_ilosc_bitow = (Convert.ToInt32((pixel.R & 254)) + Convert.ToInt32(ilosc_bitow[l].ToString()));
                Bitmap.SetPixel(Bitmap.wysokosc - 1, j, Color.FromArgb(lsb_ilosc_bitow, pixel.G, pixel.B));
                l++;
            }


            foreach (var a in t)
            {
                binary[licz_a] = Convert.ToString(Convert.ToChar(a), 2);


                while (binary[licz_a].Length < zapis)
                {
                    binary[licz_a] = "0" + binary[licz_a];
                }

                for (int k = 0; k < binary[licz_a].Length; k++)
                {
                    temp_binary[licz_a] = temp_binary[licz_a] + Convert.ToString(binary[licz_a][binary[licz_a].Length - (k + 1)]); // teraz dobrze
                }



                znak[licz_a] = temp_binary[licz_a];

                licz_a++;
            }



            for (int i = 0; i < Bitmap.wysokosc; i++)
            {
                for (int j = 0; j < Bitmap.szerokosc; j++)
                {
                    pixel = Bitmap.GetPixel(i, j);


                    if (licz < znak.Length)
                    {
                        if (indeks == "Multi") // test wszystkie kanały - multi
                        {
                            if (xor_aktywacja == true)
                            {
                                if (licznik_multi == 4)
                                {
                                    licznik_multi = 0;
                                }

                                if (licznik_multi == 0)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.A & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.R, pixel.G, pixel.B));                                  // A
                                }

                                if (licznik_multi == 1)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.B & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_M));                                           // B
                                }
                                if (licznik_multi == 2)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.R & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.G, pixel.B));                                           // R
                                }
                                if (licznik_multi == 3)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.G & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_M, pixel.B));                                           // G
                                }


                                licznik_multi++;
                            }
                            else
                            {
                                if (licznik_multi == 4)
                                {
                                    licznik_multi = 0;
                                }

                                if (licznik_multi == 0)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.A & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.R, pixel.G, pixel.B));                          // A
                                }

                                if (licznik_multi == 1)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.B & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_M));                                   // B
                                }
                                if (licznik_multi == 2)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.R & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(lsb_M, pixel.G, pixel.B));                                   // R
                                }
                                if (licznik_multi == 3)
                                {
                                    int lsb_M = (Convert.ToInt32((pixel.G & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()))); // operacja xor
                                    Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_M, pixel.B));                                   // G
                                }

                                licznik_multi++;
                            }
                        }


                        if (indeks == "R")
                        {
                            if (xor_aktywacja == true)
                            {
                                int lsb_R = (Convert.ToInt32((pixel.R & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                Bitmap.SetPixel(i, j, Color.FromArgb(lsb_R, pixel.G, pixel.B));
                            }
                            else
                            {
                                int lsb_R = (Convert.ToInt32((pixel.R & 254)) + Convert.ToInt32(znak[licz][licz2].ToString()));
                                Bitmap.SetPixel(i, j, Color.FromArgb(lsb_R, pixel.G, pixel.B));
                            }
                        }
                        else if (indeks == "G")
                        {
                            if (xor_aktywacja == true)
                            {
                                int lsb_G = (Convert.ToInt32((pixel.G & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_G, pixel.B));
                            }
                            else
                            {
                                int lsb_G = (Convert.ToInt32((pixel.G & 254)) + Convert.ToInt32(znak[licz][licz2].ToString()));
                                Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, lsb_G, pixel.B));
                            }
                        }
                        else if (indeks == "B")
                        {
                            if (xor_aktywacja == true)
                            {
                                int lsb_B = (Convert.ToInt32((pixel.B & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_B));
                            }
                            else
                            {
                                int lsb_B = (Convert.ToInt32((pixel.B & 254)) + Convert.ToInt32(znak[licz][licz2].ToString()));
                                Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, lsb_B));
                            }
                        }

                        // kanał A
                        else if (indeks == "A")
                        {
                            if (xor_aktywacja == true)
                            {
                                int lsb_A = (Convert.ToInt32((pixel.A & 254)) + (Convert.ToInt32(znak[licz][licz2].ToString()) ^ (xor))); // operacja xor
                                Bitmap.SetPixel(i, j, Color.FromArgb(lsb_A, pixel.R, pixel.G, pixel.B));
                            }
                            else
                            {
                                int lsb_A = (Convert.ToInt32((pixel.A & 254)) + Convert.ToInt32(znak[licz][licz2].ToString()));
                                Bitmap.SetPixel(i, j, Color.FromArgb(lsb_A, pixel.R, pixel.G, pixel.B));
                            }
                        }

                        licz2++;



                        if (licz2 == zapis - 1 && znak.Length > licz)
                        {
                            licz2 = 0;
                            licz++;
                            j++;
                        }
                    }

                    if (i == Bitmap.wysokosc - 1 && j == Bitmap.szerokosc - 1)
                    {
                        Bitmap.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, ilosc_bitow.Length ^ xor));
                    }
                }
            }

            Bitmap bmp_save = Bitmap.Save();

            // MessageBox.Show(Convert.ToString(test));

            return(bmp_save);
        }
Example #2
0
        public static string dekodowanie(Bitmap bmp, string indeks, string kodowanie, int zapis, int xor, bool xor_aktywacja)
        {
            Pixel Bitmap = new Pixel(bmp);

            Bitmap.LockBits();
            int licznik_multi = 0;


            StringBuilder wiadomosc = new StringBuilder();
            Color         pixel;

            string value2      = "";
            string s_msgLength = "";
            long   licz        = 0;

            Color lastpixel = Bitmap.GetPixel(Bitmap.wysokosc - 1, Bitmap.szerokosc - 1); // ilość początkowych bitów do odczytania rozmiaru wiadomosci



            for (int j = (Bitmap.szerokosc - 1); j > (Bitmap.szerokosc - 1) - (lastpixel.B ^ xor); j--)
            {
                pixel = Bitmap.GetPixel((Bitmap.wysokosc - 1), j);

                int lsb = (pixel.R & 1);
                s_msgLength = s_msgLength + lsb.ToString();
            }


            int msgLength = Konwertuj_string_binarny(s_msgLength);



            for (int i = 0; i < Bitmap.wysokosc; i++)
            {
                for (int j = 0; j < Bitmap.szerokosc; j++)
                {
                    //   if (j % 2 == 0) xor = 1;
                    //   else xor = 0;

                    if (licz < (msgLength * (zapis)))
                    {
                        pixel = Bitmap.GetPixel(i, j);


                        if (indeks == "Multi") // test multi
                        {
                            if (value2.Length < zapis - 1)
                            {
                                if (xor_aktywacja == true)
                                {
                                    if (licznik_multi == 4)
                                    {
                                        licznik_multi = 0;
                                    }
                                    if (licznik_multi == 0)
                                    {
                                        value2 += ((pixel.A & 1) ^ (xor)).ToString();                      // A
                                    }
                                    if (licznik_multi == 1)
                                    {
                                        value2 += ((pixel.B & 1) ^ (xor)).ToString();                      // B
                                    }
                                    if (licznik_multi == 2)
                                    {
                                        value2 += ((pixel.R & 1) ^ (xor)).ToString();                      // R
                                    }
                                    if (licznik_multi == 3)
                                    {
                                        value2 += ((pixel.G & 1) ^ (xor)).ToString();                      // G
                                    }
                                    licznik_multi++;
                                }
                                else
                                {
                                    if (licznik_multi == 4)
                                    {
                                        licznik_multi = 0;
                                    }
                                    if (licznik_multi == 0)
                                    {
                                        value2 += ((pixel.A & 1)).ToString();                       // A
                                    }
                                    if (licznik_multi == 1)
                                    {
                                        value2 += ((pixel.B & 1)).ToString();                       // B
                                    }
                                    if (licznik_multi == 2)
                                    {
                                        value2 += ((pixel.R & 1)).ToString();                       // R
                                    }
                                    if (licznik_multi == 3)
                                    {
                                        value2 += ((pixel.G & 1)).ToString();                       // G
                                    }
                                    Console.WriteLine(value2);

                                    licznik_multi++;
                                }
                            }
                            else
                            {
                                string temp_value = "";


                                for (int k = 0; k < value2.Length; k++)
                                {
                                    temp_value += Convert.ToString(value2[(value2.Length) - (k + 1)]); // teraz dobrze
                                }



                                if (kodowanie == "UTF8")
                                {
                                    string letter = System.Text.Encoding.UTF8.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF32")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }
                                if (kodowanie == "ASCII")
                                {
                                    string letter = System.Text.Encoding.ASCII.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF16")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }

                                value2     = "";
                                temp_value = "";
                            }
                        }



                        /////////////////////////////////////////////////////////////////////////////////////////////////
                        if (indeks == "R")
                        {
                            if (value2.Length < zapis - 1)
                            {
                                if (xor_aktywacja == true)
                                {
                                    value2 += ((pixel.R & 1) ^ (xor)).ToString();
                                }

                                else
                                {
                                    value2 += ((pixel.R & 1)).ToString();
                                }
                            }
                            else
                            {
                                string temp_value = "";


                                for (int k = 0; k < value2.Length; k++)
                                {
                                    temp_value += Convert.ToString(value2[(value2.Length) - (k + 1)]); // teraz dobrze
                                }



                                if (kodowanie == "UTF8")
                                {
                                    string letter = System.Text.Encoding.UTF8.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF32")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }
                                if (kodowanie == "ASCII")
                                {
                                    string letter = System.Text.Encoding.ASCII.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF16")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }

                                value2     = "";
                                temp_value = "";
                            }
                        }
                        else if (indeks == "G")
                        {
                            if (value2.Length < zapis - 1)
                            {
                                if (xor_aktywacja == true)
                                {
                                    value2 += ((pixel.G & 1) ^ (xor)).ToString();
                                }

                                else
                                {
                                    value2 += ((pixel.G & 1)).ToString();
                                }
                            }
                            else
                            {
                                string temp_value = "";

                                for (int k = 0; k < value2.Length; k++)
                                {
                                    temp_value = temp_value + Convert.ToString(value2[(value2.Length) - (k + 1)]); // teraz dobrze
                                }



                                if (kodowanie == "UTF8")
                                {
                                    string letter = System.Text.Encoding.UTF8.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF32")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }
                                if (kodowanie == "ASCII")
                                {
                                    string letter = System.Text.Encoding.ASCII.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF16")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }

                                value2     = "";
                                temp_value = "";
                            }
                        }
                        else if (indeks == "B")
                        {
                            if (value2.Length < zapis - 1)
                            {
                                if (xor_aktywacja == true)
                                {
                                    value2 += ((pixel.B & 1) ^ (xor)).ToString();
                                }

                                else
                                {
                                    value2 += ((pixel.B & 1)).ToString();
                                }
                            }
                            else
                            {
                                string temp_value = "";

                                for (int k = 0; k < value2.Length; k++)
                                {
                                    temp_value = temp_value + Convert.ToString(value2[(value2.Length) - (k + 1)]); // teraz dobrze
                                }


                                if (kodowanie == "UTF8")
                                {
                                    string letter = System.Text.Encoding.UTF8.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF32")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }
                                if (kodowanie == "ASCII")
                                {
                                    string letter = System.Text.Encoding.ASCII.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF16")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }

                                value2     = "";
                                temp_value = "";
                            }
                        }

                        else if (indeks == "A") // prawidłowo kanał A
                        {
                            if (value2.Length < zapis - 1)
                            {
                                if (xor_aktywacja == true)
                                {
                                    value2 += ((pixel.A & 1) ^ (xor)).ToString();
                                }

                                else
                                {
                                    value2 += ((pixel.A & 1)).ToString();
                                }
                            }
                            else
                            {
                                string temp_value = "";

                                for (int k = 0; k < value2.Length; k++)
                                {
                                    temp_value = temp_value + Convert.ToString(value2[(value2.Length) - (k + 1)]); // teraz dobrze
                                }


                                if (kodowanie == "UTF8")
                                {
                                    string letter = System.Text.Encoding.UTF8.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF32")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }
                                if (kodowanie == "ASCII")
                                {
                                    string letter = System.Text.Encoding.ASCII.GetString(new byte[] { Convert.ToByte(Convert.ToChar(Konwertuj_string_binarny(temp_value))) });
                                    wiadomosc.Append(letter);
                                }
                                if (kodowanie == "UTF16")
                                {
                                    string letter = Konwertuj_string_binarny(temp_value).ToString();
                                    wiadomosc.Append(Convert.ToChar(Convert.ToInt32(letter)));
                                }


                                value2     = "";
                                temp_value = "";
                            }
                        }
                    }
                    licz++;
                }
            }

            return(wiadomosc.ToString());
        }