Перевод из двоичного кода в текст - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, в c# совсем новичок, занимаюсь стеганографией. Почти все сделал только немного не понимаю как раскодировать. Сначала я заливаю картинку, затем пишу сообщение. Это сообщение перевожу в двоичный код. Посредством измены последнего пикселя я меняю последний бит пиксиля на тот, который у меня в сообщении. Делаю с [0,0] пикселя и до последнего, посредством i++ и j++ в циклах. В дешифровке забираю свое сообщение в двоичном коде, которое в string'е. и что делать дальше не знаю. К примеру, string s = "10101010101010101101001010101010", прошу помочь, буду очень благодарен.

Решение задачи: «Перевод из двоичного кода в текст»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace New_Steg
{
    
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog openDialog = new OpenFileDialog();
            openDialog.Filter = "Image Files (*.png, *.jpg) | *.png; *.jpg";
            openDialog.InitialDirectory = @"C:\\Users\Desktop";
 
            if (openDialog.ShowDialog() == DialogResult.OK)
            {
                textBoxFilePath.Text = openDialog.FileName.ToString();
                pictureBox1.ImageLocation = textBoxFilePath.Text;
            }
        }
 
        private void button1_Click(object sender, EventArgs e) // кнопка кодирования
        {
           
            Bitmap img = new Bitmap(textBoxFilePath.Text); 
            int m = 0;  //счетчик
            string mess = "";
           
            for (int i=0;i<textBoxMessage.TextLength;i++)
            {
                char letter = Convert.ToChar(textBoxMessage.Text.Substring(i, 1));
                byte b_letter = Convert.ToByte(letter);
                mess += Convert.ToString(b_letter, 2);
            }   //конвертация текста в двоичный код
            Console.WriteLine("all letters " + mess);
 
            for (int i = 0; i < img.Width; i++)
            {
 
                for (int j = 0; j < img.Height; j++)
                {
 
                    Color pixel = img.GetPixel(i, j);
                  byte b_pixel = Convert.ToByte(pixel.B); // получение кода синего пикселя
                    
                    
                    if (m <mess.Length)
                    {
                        
                        img.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, code(b_pixel,mess.Substring(m,1))));
                        Console.WriteLine("i " + i + " j " + j+ " bytes: "+ b_pixel+" mess_1 "+mess.Substring(m, 1));
                        m++;
                    } // изменяет голубой бит пикселя
                   
 
                    if (i == img.Width - 1 && j == img.Height - 1)
                    {
                        img.SetPixel(i, j, Color.FromArgb(pixel.R, pixel.G, mess.Length));// записывает кол-во битов текста в последний пиксель
                        break;
                    }
                    
 
                }
               
            }
                         
            SaveFileDialog saveFile = new SaveFileDialog();
            saveFile.Filter = "Image Files (*.png, *.jpg) | *.png; *.jpg";
            saveFile.InitialDirectory = @"C:\\Users\Desktop";
            if (saveFile.ShowDialog() == DialogResult.OK)
            {
                textBoxFilePath.Text = saveFile.FileName.ToString();
                pictureBox1.ImageLocation = textBoxFilePath.Text;
                img.Save(textBoxFilePath.Text);
            }// сохранение
        }
 
        private void button2_Click(object sender, EventArgs e) //кнопка декодирования
        {
            Bitmap img = new Bitmap(textBoxFilePath.Text);
            string b_message = "";  //битовое сообщение
            string message = "";    //сообщение, которое должно получиться
            int m = 0;  //счетчик
            
            Color lastpixel = img.GetPixel(img.Width - 1, img.Height - 1);
            int msgLength = lastpixel.B; // конец сообщения из битов
            for (int i = 0; i < img.Width; i++)
            {
 
                for (int j = 0; j < img.Height; j++)
                {
                    Color pixel = img.GetPixel(i, j);
                    if (m < msgLength)
                    {
                        int value = pixel.B;
                        Console.WriteLine("Pixel.b = " + pixel.B + " bit= " + decode(value));
                        b_message += decode(value);
                      
                        m++;
 
                    }// переписывает в b_message биты первых пикселей
 
                }
 
            }
 
 
            string a = "";
 
            message += Convert.ToString(b_message);
           
            Console.WriteLine(a);
            textBoxMessage.Text = a;
            
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            BackColor = Color.BlueViolet;
            textBoxFilePath.BackColor = Color.Aqua;
        }
 
       static int code(int number,string bit) // кодирование пикселя
        {
            if ((number % 2 == 0 && bit == "1") || (number % 2 != 0 && bit == "0"))
            {
                if (number != 0)
                {
                    number--;
                    return number;
                }
                else number++;
                return number;
            }
            else return number;
            
        }
 
        static int decode(int number) // получение бита из пикселя
        {
            if (number % 2 == 0)
                return 0;
            else return 1;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы