Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Drawing;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace EMEDIAPLS
- {
- class Obsluga_obrazka
- {
- List<byte> kluczxor = new List<byte>();
- List<byte> naglowek_1 = new List<byte>();
- List<byte> naglowek_2 = new List<byte>();
- public byte[] obrazek_w_bajtach;
- string my_filename;
- public Obsluga_obrazka(string file_name)
- {
- var keys = File.ReadLines("key.txt");
- foreach (var key in keys)
- {
- kluczxor.Add((byte)(int.Parse(key)));
- }
- my_filename = file_name;
- obrazek_w_bajtach = File.ReadAllBytes(file_name);
- if (!(obrazek_w_bajtach[0] == 0x00FF && obrazek_w_bajtach[1] == 0x00D8))
- { Console.WriteLine("Wrong file type"); return; }
- for (int i = 2; i < obrazek_w_bajtach.Length; i++)
- {
- if ((obrazek_w_bajtach[i] == 0x00C0 || obrazek_w_bajtach[i] == 0x00E0) && obrazek_w_bajtach[i - 1] == 0x00FF)
- {
- byte sekcjaNaglowka = obrazek_w_bajtach[i]; i++;
- while (sekcjaNaglowka == 0x00C0 && obrazek_w_bajtach[i] != 0x00ff) { naglowek_1.Add(obrazek_w_bajtach[i]); i++; }
- while (sekcjaNaglowka == 0x00E0 && obrazek_w_bajtach[i] != 0x00ff) { naglowek_2.Add(obrazek_w_bajtach[i]); i++; }
- }
- }
- }
- public void show_header()
- {
- try
- {
- Console.WriteLine("Informacje sczytane z nagłówka");
- Console.WriteLine("Szerokość obrazka w pikselach: " + (naglowek_1[5] * 256 + naglowek_1[6]).ToString());
- Console.WriteLine("Wysokość obrazka w pikselach: " + (naglowek_1[3] * 256 + naglowek_1[4]).ToString());
- }
- catch
- {
- Console.WriteLine("Nie znaleziono nagłówka pliku, w którym są dane o rozmiarze");
- }
- try
- {
- if (naglowek_2[9] == 0x0001)
- {
- Console.WriteLine("Rozdzielczość pozioma obrazka w dpi: " + (naglowek_2[10] * 256 + naglowek_2[11]).ToString());
- Console.WriteLine("Rozdzielczość pionowa obrazka w dpi: " + (naglowek_2[12] * 256 + naglowek_2[13]).ToString());
- }
- else
- {
- Console.WriteLine("Rozdzielczosć pozioma obrazka w d/cm: " + (naglowek_2[10] * 256 + naglowek_2[11]).ToString());
- Console.WriteLine("Rozdzielczość pionowa obrazka w d/cm: " + (naglowek_2[12] * 256 + naglowek_2[13]).ToString());
- }
- Console.WriteLine("Wersja pliku jpg: " + (naglowek_2[7]).ToString() + "." + (naglowek_2[8]).ToString());
- }
- catch
- {
- Console.WriteLine("Nie znaleziono nagłówka pliku, gdzie są dane o rozdzielczościach i wersji jpg");
- }
- }
- public byte[] encrypt_decrypt_XOR(byte[] data, int start)
- {
- byte[] output = new byte[data.Length];
- for (int i=0; i< data.Length;)
- {
- while (i < start) { output[i] = data[i]; i++; }
- for (int j=0; j<kluczxor.Count()-1; j++)
- {
- if(i< data.Length)
- {
- output[i] = (byte)(data[i] ^ kluczxor[j]);
- i++;
- }
- }
- }
- return output;
- }
- public Bitmap CreateImageFromBytes(byte[] image)
- {
- try
- {
- return new Bitmap(Image.FromStream(new MemoryStream(image)));
- }
- catch
- {
- Console.WriteLine("Nagłówek pliku został uszkodzony! Zapisano oryginalny obrazek");
- return new Bitmap(Image.FromStream(new MemoryStream(obrazek_w_bajtach)));
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- while (true)
- {
- System.Console.WriteLine("Podaj nazwę pliku. Zostanie wyświetlony jego nagłówek, a następnie zostanie on zaszyfrowany zgodnie z kluczem.");
- System.Console.WriteLine("Zaszyfrowany obrazek nadpisze plik Encrypted_Image_XOR.jpg, jeśli uda się go poprawnie odczytać.");
- System.Console.WriteLine("Następnie nastąpi deszyfracja i zdeszyfrowany obrazek zapisany zostanie w pliku Decrypted_Image_XOR.jpg.");
- System.Console.WriteLine("Nazwa pliku:");
- var filename = Console.ReadLine();
- Obsluga_obrazka myImage = new Obsluga_obrazka(filename);
- myImage.show_header();
- var original = myImage.obrazek_w_bajtach;
- var encrypted = myImage.encrypt_decrypt_XOR(original, 1500);
- Bitmap encrypImg = myImage.CreateImageFromBytes(encrypted);
- encrypImg.Save("Encrypted_Image_XOR.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
- var decrypted = myImage.encrypt_decrypt_XOR(encrypted, 1500);
- Bitmap decrypImg = myImage.CreateImageFromBytes(decrypted);
- decrypImg.Save("Decrypted_Image_XOR.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement