Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.24 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Security.Cryptography;
  10. using System.IO;
  11.  
  12.  
  13. namespace WindowsFormsApplication1
  14. {
  15.  
  16. public partial class Form1 : Form
  17. {
  18. ConversionHandler myConverter = new ConversionHandler();
  19. SymmetricAlgorithm mySymmetricAlg;
  20.  
  21. public Form1()
  22. {
  23. InitializeComponent();
  24. }
  25.  
  26. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  27. {
  28.  
  29. }
  30.  
  31. private void Form1_Load(object sender, EventArgs e)
  32. {
  33.  
  34. }
  35. public void Generate(string cipher)
  36. {
  37. switch (cipher)
  38. {
  39. case "DES":
  40. mySymmetricAlg = DES.Create();
  41. break;
  42. case "3DES":
  43. mySymmetricAlg = TripleDES.Create();
  44. break;
  45. case "Rijndael":
  46. mySymmetricAlg = Rijndael.Create();
  47. break;
  48. }
  49. mySymmetricAlg.GenerateIV();
  50. mySymmetricAlg.GenerateKey();
  51. }
  52. public byte[] Encrypt(byte[] mess, byte[] key, byte[] iv)
  53. {
  54. mySymmetricAlg.Key = key;
  55. mySymmetricAlg.IV = iv;
  56. MemoryStream ms = new MemoryStream();
  57. CryptoStream cs = new CryptoStream(ms, mySymmetricAlg.CreateEncryptor(),CryptoStreamMode.Write);
  58. cs.Write(mess, 0, mess.Length);
  59. cs.Close();
  60. return ms.ToArray();
  61. }
  62. public byte[] Decrypt(byte[] mess, byte[] key, byte[] iv)
  63. {
  64. byte[] plaintext = new byte[mess.Length];
  65. mySymmetricAlg.Key = key;
  66. mySymmetricAlg.IV = iv;
  67. MemoryStream ms = new MemoryStream(mess);
  68. CryptoStream cs = new CryptoStream(ms,
  69. mySymmetricAlg.CreateDecryptor(),
  70. CryptoStreamMode.Read);
  71. cs.Read(plaintext, 0, mess.Length);
  72. cs.Close();
  73. return plaintext;
  74. }
  75.  
  76. private void button2_Click(object sender, EventArgs e)
  77. {
  78. byte[] ciphertext = Encrypt(myConverter.StringToByteArray(textBox3.Text), myConverter.HexStringToByteArray(textBox1.Text),myConverter.HexStringToByteArray(textBox2.Text));
  79. textBox5.Text = myConverter.ByteArrayToString(ciphertext);
  80. textBox5.Text = myConverter.ByteArrayToHexString(ciphertext);
  81. textBox4.Text = myConverter.ByteArrayToHexString(myConverter.StringToByteArray(textBox3.Text));
  82. }
  83.  
  84. private void button3_Click(object sender, EventArgs e)
  85. {
  86. byte[] plaintext = Decrypt(myConverter.HexStringToByteArray(textBox6.Text), myConverter.HexStringToByteArray(textBox1.Text),myConverter.HexStringToByteArray(textBox2.Text));
  87. textBox3.Text = myConverter.ByteArrayToString(plaintext);
  88. textBox4.Text = myConverter.ByteArrayToHexString(plaintext);
  89. }
  90.  
  91. private void button1_Click(object sender, EventArgs e)
  92. {
  93. Generate(comboBox1.Text);
  94. textBox1.Text = myConverter.ByteArrayToHexString(mySymmetricAlg.Key);
  95. textBox2.Text = myConverter.ByteArrayToHexString(mySymmetricAlg.IV);
  96. }
  97.  
  98. private void button4_Click(object sender, EventArgs e)
  99. {
  100. mySymmetricAlg.GenerateIV(); // generates a fresh IV
  101. mySymmetricAlg.GenerateKey(); // generates a fresh Key
  102. MemoryStream ms = new MemoryStream();
  103. CryptoStream cs = new CryptoStream(ms,
  104. mySymmetricAlg.CreateEncryptor(),
  105. CryptoStreamMode.Write);
  106. byte[] mes_block = new byte[8];
  107. long start_time = DateTime.Now.Ticks;
  108. int count = 10000000;
  109. for (int i = 0; i < count; i++)
  110. {
  111. cs.Write(mes_block, 0, mes_block.Length);
  112. }
  113. cs.Close();
  114. double operation_time = (DateTime.Now.Ticks - start_time);
  115. operation_time = operation_time / (10*count); // 1 tick is 100 ns, i.e., 1/10 of 1 us
  116. label9.Text = "Time for encryption of a message block: " + operation_time.ToString() +" us";
  117.  
  118. }
  119.  
  120. }
  121.  
  122. class ConversionHandler
  123. {
  124. public byte[] StringToByteArray(string s)
  125. {
  126. return CharArrayToByteArray(s.ToCharArray());
  127. }
  128. public byte[] CharArrayToByteArray(char[] array)
  129. {
  130. return Encoding.ASCII.GetBytes(array, 0, array.Length);
  131. }
  132. public string ByteArrayToString(byte[] array)
  133. {
  134. return Encoding.ASCII.GetString(array);
  135. }
  136. public string ByteArrayToHexString(byte[] array)
  137. {
  138. string s = "";
  139. int i;
  140. for (i = 0; i < array.Length; i++)
  141. {
  142. s = s + NibbleToHexString((byte)((array[i] >> 4) & 0x0F)) + NibbleToHexString((byte)(array[i] & 0x0F));
  143. }
  144. return s;
  145. }
  146. public byte[] HexStringToByteArray(string s)
  147. {
  148. byte[] array = new byte[s.Length / 2];
  149. char[] chararray = s.ToCharArray();
  150. int i;
  151. for (i = 0; i < s.Length / 2; i++)
  152. {
  153. array[i] = (byte)(((HexCharToNibble(chararray[2 * i]) << 4) & 0xF0) | ((HexCharToNibble(chararray[2 * i + 1]) & 0x0F)));
  154. }
  155. return array;
  156. }
  157. public string NibbleToHexString(byte nib)
  158. {
  159. string s;
  160. if (nib < 10)
  161. {
  162. s = nib.ToString();
  163. }
  164. else
  165. {
  166. char c = (char)(nib + 55);
  167. s = c.ToString();
  168. }
  169. return s;
  170. }
  171. public byte HexCharToNibble(char c)
  172. {
  173. byte value = (byte)c;
  174. if (value < 65)
  175. {
  176. value = (byte)(value - 48);
  177.  
  178. }
  179. else
  180. {
  181. value = (byte)(value - 55);
  182.  
  183. }
  184. return value;
  185.  
  186. }
  187.  
  188. }
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement