private void SzyfrujButton_Click(object sender, RoutedEventArgs e)
        {
            var sizeoftext = (Changery.StringToBitArray(DoZaszyfrowaniaText.Text).Length);

            if (sizeoftext > pojemnoscszyfrowania)
            {
                MessageBox.Show("Niestety, tekst jest zbyt długi dla wczytanego obrazu. Wczytaj większy obraz lub skróć tekst tekst.");
            }
            else
            {
                if (CheckBox.IsChecked == false)
                {
                    Obraz = Szyfry.Szyfruj(Obraz, DoZaszyfrowaniaText.Text);
                    ImageSource imgSource = new BitmapImage(new Uri(path));
                    image2.Source = imgSource;
                    //DeszyfrujButton.IsEnabled = true;
                    MessageBox.Show("Pomyślnie zaszyfrowano.");
                }
                else
                {
                    Obraz = Szyfry.Ukryj2(Obraz, DoZaszyfrowaniaText.Text);
                    ImageSource imgSource = new BitmapImage(new Uri(path));
                    image2.Source = imgSource;
                    //DeszyfrujButton.IsEnabled = true;
                    MessageBox.Show("Pomyślnie zaszyfrowano.");
                }
            }
        }
예제 #2
0
        public static string DekodujObraz(Bitmap Obraz)
        {
            //Zmiany bitów "Niezauważalne"
            //1 bit w kolorze zielonym
            //2 bity w czerwonym
            //5 bitów w niebieskiem
            //Szyfruję w kolejności R G B

            //Kodowanie zielone - parzyste->0 nieparzyste->1
            //Kodowanie czerwone %4 0->00 1->01 2->10 3->11
            //Kodowanie niebieskie %32 0->0 0000 .... 31-> 1 1111


            int PozycjaWbitach = 0;

            int      Height      = Obraz.Height;
            int      Width       = Obraz.Width;
            BitArray TekstBitowy = new BitArray((Height * Width * 8));
            Color    kolor;
            int      R, G, B;

            R = G = B = 0;
            for (int i = 0; i < Height; i++)
            {
                for (int j = 0; j < Width; j++)
                {
                    kolor = Obraz.GetPixel(j, i);
                    R     = kolor.R;
                    B     = kolor.B;
                    G     = kolor.G;

                    var Zakoduj = 0;

                    Zakoduj = R % 4;
                    switch (Zakoduj)
                    {
                    case 0:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        break;

                    case 1:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        break;

                    case 2:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        break;

                    case 3:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        break;
                    }
                    PozycjaWbitach += 2;

                    //Kodowanie zielonego 1 bitowe

                    TekstBitowy[PozycjaWbitach] = (G % 2 == 1);

                    PozycjaWbitach++;
                    //Kodowanie niebieskiego 5 bitowe
                    Zakoduj = B % 32;
                    switch (Zakoduj)
                    {
                    case 0:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 1:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 2:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 3:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 4:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 5:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 6:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 7:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 8:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 9:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 10:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 11:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 12:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 13:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 14:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 15:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = false;
                        break;

                    case 16:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 17:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 18:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 19:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 20:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 21:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 22:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 23:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = false;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 24:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 25:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 26:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 27:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = false;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 28:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 29:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = false;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 30:
                        TekstBitowy[PozycjaWbitach]     = false;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;

                    case 31:
                        TekstBitowy[PozycjaWbitach]     = true;
                        TekstBitowy[PozycjaWbitach + 1] = true;
                        TekstBitowy[PozycjaWbitach + 2] = true;
                        TekstBitowy[PozycjaWbitach + 3] = true;
                        TekstBitowy[PozycjaWbitach + 4] = true;
                        break;
                    }
                    PozycjaWbitach += 5;
                }
            }
            string tekstOdszyfrowany = Changery.BitsToString(TekstBitowy);

            tekstOdszyfrowany = tekstOdszyfrowany.Replace('\0', ' ');
            return(tekstOdszyfrowany);
        }
예제 #3
0
        public static Bitmap Szyfruj(Bitmap Obraz, string tekst)
        {
            //Zmiany bitów "Niezauważalne"
            //1 bit w kolorze zielonym
            //2 bity w czerwonym
            //5 bitów w niebieskiem
            //Szyfruję w kolejności R G B

            //Kodowanie zielone - parzyste->0 nieparzyste->1
            //Kodowanie czerwone %4 0->00 1->01 2->10 3->11
            //Kodowanie niebieskie %32 0->0 0000 .... 31-> 1 1111

            BitArray TekstBitowy    = Changery.StringToBitArray(tekst);
            int      PozycjaWbitach = 0;

            int   Height = Obraz.Height;
            int   Width  = Obraz.Width;
            Color kolor;
            int   R, G, B;

            R = G = B = 0;
            for (int i = 0; i < Height; i++)
            {
                for (int j = 0; j < Width; j++)
                {
                    kolor = Obraz.GetPixel(j, i);
                    R     = kolor.R;
                    B     = kolor.B;
                    G     = kolor.G;

                    var Zakoduj = 0;

                    //Kodowanie czerwonego

                    //1 bit
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj++;
                        }
                    }
                    PozycjaWbitach++;

                    //2bit
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj += 2;
                        }
                    }
                    PozycjaWbitach++;
                    R = R - R % 4 + Zakoduj;

                    //Kodowanie zielonego 1 bitowe
                    Zakoduj = 0;
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj = 1;
                        }
                    }
                    PozycjaWbitach++;

                    G = G - G % 2 + Zakoduj;

                    //Kodowanie niebieskiego 5 bitowe
                    Zakoduj = 0;
                    //1 bit
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj = 1;
                        }
                    }
                    PozycjaWbitach++;

                    //2 bit
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj += 2;
                        }
                    }
                    PozycjaWbitach++;

                    //3 bit
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj += 4;
                        }
                    }
                    PozycjaWbitach++;

                    //4 bit
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj += 8;
                        }
                    }
                    PozycjaWbitach++;

                    //5 bit
                    if (PozycjaWbitach < TekstBitowy.Length)
                    {
                        if (TekstBitowy[PozycjaWbitach])
                        {
                            Zakoduj += 16;
                        }
                    }
                    PozycjaWbitach++;


                    B = B - B % 32 + Zakoduj;

                    Obraz.SetPixel(j, i, Color.FromArgb(R, G, B));
                    //if (PozycjaWbitach == TekstBitowy.Length)
                    //    break;
                }
            }
            return(Obraz);
        }