Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.58 KB | None | 0 0
  1. using System;
  2. using System.Drawing;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace EMEDIAPLS
  10. {
  11. class Obsluga_obrazka
  12. {
  13. List<byte> kluczxor = new List<byte>();
  14. List<byte> naglowek_1 = new List<byte>();
  15. List<byte> naglowek_2 = new List<byte>();
  16. public byte[] obrazek_w_bajtach;
  17. string my_filename;
  18. public Obsluga_obrazka(string file_name)
  19. {
  20. var keys = File.ReadLines("key.txt");
  21. foreach (var key in keys)
  22. {
  23. kluczxor.Add((byte)(int.Parse(key)));
  24. }
  25. my_filename = file_name;
  26. obrazek_w_bajtach = File.ReadAllBytes(file_name);
  27. if (!(obrazek_w_bajtach[0] == 0x00FF && obrazek_w_bajtach[1] == 0x00D8))
  28. { Console.WriteLine("Wrong file type"); return; }
  29.  
  30. for (int i = 2; i < obrazek_w_bajtach.Length; i++)
  31. {
  32. if ((obrazek_w_bajtach[i] == 0x00C0 || obrazek_w_bajtach[i] == 0x00E0) && obrazek_w_bajtach[i - 1] == 0x00FF)
  33. {
  34. byte sekcjaNaglowka = obrazek_w_bajtach[i]; i++;
  35. while (sekcjaNaglowka == 0x00C0 && obrazek_w_bajtach[i] != 0x00ff) { naglowek_1.Add(obrazek_w_bajtach[i]); i++; }
  36. while (sekcjaNaglowka == 0x00E0 && obrazek_w_bajtach[i] != 0x00ff) { naglowek_2.Add(obrazek_w_bajtach[i]); i++; }
  37. }
  38. }
  39. }
  40.  
  41. public void show_header()
  42. {
  43.  
  44. try
  45. {
  46. Console.WriteLine("Informacje sczytane z nagłówka");
  47. Console.WriteLine("Szerokość obrazka w pikselach: " + (naglowek_1[5] * 256 + naglowek_1[6]).ToString());
  48. Console.WriteLine("Wysokość obrazka w pikselach: " + (naglowek_1[3] * 256 + naglowek_1[4]).ToString());
  49. }
  50. catch
  51. {
  52. Console.WriteLine("Nie znaleziono nagłówka pliku, w którym są dane o rozmiarze");
  53. }
  54. try
  55. {
  56. if (naglowek_2[9] == 0x0001)
  57. {
  58. Console.WriteLine("Rozdzielczość pozioma obrazka w dpi: " + (naglowek_2[10] * 256 + naglowek_2[11]).ToString());
  59. Console.WriteLine("Rozdzielczość pionowa obrazka w dpi: " + (naglowek_2[12] * 256 + naglowek_2[13]).ToString());
  60. }
  61. else
  62. {
  63. Console.WriteLine("Rozdzielczosć pozioma obrazka w d/cm: " + (naglowek_2[10] * 256 + naglowek_2[11]).ToString());
  64. Console.WriteLine("Rozdzielczość pionowa obrazka w d/cm: " + (naglowek_2[12] * 256 + naglowek_2[13]).ToString());
  65. }
  66. Console.WriteLine("Wersja pliku jpg: " + (naglowek_2[7]).ToString() + "." + (naglowek_2[8]).ToString());
  67. }
  68. catch
  69. {
  70. Console.WriteLine("Nie znaleziono nagłówka pliku, gdzie są dane o rozdzielczościach i wersji jpg");
  71. }
  72. }
  73.  
  74. public byte[] encrypt_decrypt_XOR(byte[] data, int start)
  75. {
  76. byte[] output = new byte[data.Length];
  77. for (int i=0; i< data.Length;)
  78. {
  79. while (i < start) { output[i] = data[i]; i++; }
  80. for (int j=0; j<kluczxor.Count()-1; j++)
  81. {
  82.  
  83. if(i< data.Length)
  84. {
  85. output[i] = (byte)(data[i] ^ kluczxor[j]);
  86. i++;
  87. }
  88.  
  89. }
  90. }
  91. return output;
  92. }
  93.  
  94. public Bitmap CreateImageFromBytes(byte[] image)
  95. {
  96. try
  97. {
  98. return new Bitmap(Image.FromStream(new MemoryStream(image)));
  99. }
  100. catch
  101. {
  102. Console.WriteLine("Nagłówek pliku został uszkodzony! Zapisano oryginalny obrazek");
  103. return new Bitmap(Image.FromStream(new MemoryStream(obrazek_w_bajtach)));
  104. }
  105. }
  106. }
  107.  
  108. class Program
  109. {
  110. static void Main(string[] args)
  111. {
  112. while (true)
  113. {
  114.  
  115. System.Console.WriteLine("Podaj nazwę pliku. Zostanie wyświetlony jego nagłówek, a następnie zostanie on zaszyfrowany zgodnie z kluczem.");
  116. System.Console.WriteLine("Zaszyfrowany obrazek nadpisze plik Encrypted_Image_XOR.jpg, jeśli uda się go poprawnie odczytać.");
  117. System.Console.WriteLine("Następnie nastąpi deszyfracja i zdeszyfrowany obrazek zapisany zostanie w pliku Decrypted_Image_XOR.jpg.");
  118. System.Console.WriteLine("Nazwa pliku:");
  119. var filename = Console.ReadLine();
  120. Obsluga_obrazka myImage = new Obsluga_obrazka(filename);
  121. myImage.show_header();
  122. var original = myImage.obrazek_w_bajtach;
  123. var encrypted = myImage.encrypt_decrypt_XOR(original, 1500);
  124. Bitmap encrypImg = myImage.CreateImageFromBytes(encrypted);
  125. encrypImg.Save("Encrypted_Image_XOR.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
  126. var decrypted = myImage.encrypt_decrypt_XOR(encrypted, 1500);
  127. Bitmap decrypImg = myImage.CreateImageFromBytes(decrypted);
  128. decrypImg.Save("Decrypted_Image_XOR.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
  129.  
  130. }
  131. }
  132. }
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement