fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7.  
  8. namespace UniCryptTester
  9. {
  10. class MainClass
  11. {
  12. static Random Rnd = new Random();
  13.  
  14. public static string PrintData(byte[] Data)
  15. {
  16. StringBuilder S = new StringBuilder();
  17. for (int i = 0; i < Data.Length; i++)
  18. {
  19. S.Append(Data[i].ToString("X").PadLeft(2, '0'));
  20. S.Append(" ");
  21. }
  22. return S.ToString();
  23. }
  24.  
  25. public static void CipherTest()
  26. {
  27. int BlockSize = 16;
  28. byte[] Zero = new byte[BlockSize];
  29. byte[] DataECB = new byte[BlockSize];
  30. byte[] DataCBC = new byte[BlockSize];
  31. byte[] DataCFB = new byte[BlockSize];
  32. byte[] DataOFB = new byte[BlockSize];
  33. byte[] CipherKey = new byte[16];
  34. byte[] CipherIV = new byte[BlockSize];
  35. Rnd.NextBytes(CipherKey);
  36. Rnd.NextBytes(CipherIV);
  37. for (int i = 0; i < BlockSize; i++)
  38. {
  39. Zero[i] = 0;
  40. DataECB[i] = 0;
  41. DataCBC[i] = 0;
  42. DataCFB[i] = 0;
  43. DataOFB[i] = 0;
  44. }
  45.  
  46. Console.WriteLine("Key: " + PrintData(CipherKey));
  47. Console.WriteLine("IV: " + PrintData(CipherIV));
  48.  
  49. try
  50. {
  51. SymmetricAlgorithm TestECB = new AesCryptoServiceProvider();
  52. TestECB.Mode = CipherMode.ECB;
  53. TestECB.Padding = PaddingMode.None;
  54. ICryptoTransform TransECB = TestECB.CreateEncryptor(CipherKey, Zero);
  55. MemoryStream StrECB = new MemoryStream();
  56. CryptoStream CStrECB = new CryptoStream(StrECB, TransECB, CryptoStreamMode.Write);
  57. CStrECB.Write(CipherIV, 0, BlockSize);
  58. CStrECB.FlushFinalBlock();
  59. StrECB.Seek(0, SeekOrigin.Begin);
  60. StrECB.Read(DataECB, 0, BlockSize);
  61. CStrECB.Close();
  62. StrECB.Close();
  63. Console.WriteLine("ECB: " + PrintData(DataECB));
  64. }
  65. catch (Exception E)
  66. {
  67. Console.WriteLine("ECB: " + E.Message);
  68. }
  69.  
  70. try
  71. {
  72. SymmetricAlgorithm TestCBC = new AesCryptoServiceProvider();
  73. TestCBC.Mode = CipherMode.CBC;
  74. TestCBC.Padding = PaddingMode.None;
  75. ICryptoTransform TransCBC = TestCBC.CreateEncryptor(CipherKey, CipherIV);
  76. MemoryStream StrCBC = new MemoryStream();
  77. CryptoStream CStrCBC = new CryptoStream(StrCBC, TransCBC, CryptoStreamMode.Write);
  78. CStrCBC.Write(Zero, 0, BlockSize);
  79. CStrCBC.FlushFinalBlock();
  80. StrCBC.Seek(0, SeekOrigin.Begin);
  81. StrCBC.Read(DataCBC, 0, BlockSize);
  82. CStrCBC.Close();
  83. StrCBC.Close();
  84. Console.WriteLine("CBC: " + PrintData(DataCBC));
  85. }
  86. catch (Exception E)
  87. {
  88. Console.WriteLine("CBC: " + E.Message);
  89. }
  90.  
  91. try
  92. {
  93. SymmetricAlgorithm TestCFB = new AesCryptoServiceProvider();
  94. TestCFB.Mode = CipherMode.CFB;
  95. TestCFB.Padding = PaddingMode.None;
  96. ICryptoTransform TransCFB = TestCFB.CreateEncryptor(CipherKey, CipherIV);
  97. MemoryStream StrCFB = new MemoryStream();
  98. CryptoStream CStrCFB = new CryptoStream(StrCFB, TransCFB, CryptoStreamMode.Write);
  99. CStrCFB.Write(Zero, 0, BlockSize);
  100. CStrCFB.FlushFinalBlock();
  101. StrCFB.Seek(0, SeekOrigin.Begin);
  102. StrCFB.Read(DataCFB, 0, BlockSize);
  103. CStrCFB.Close();
  104. StrCFB.Close();
  105. Console.WriteLine("CFB: " + PrintData(DataCFB));
  106. }
  107. catch (Exception E)
  108. {
  109. Console.WriteLine("CFB: " + E.Message);
  110. }
  111.  
  112. for (int i = 0; i <= 128; i++)
  113. {
  114. try
  115. {
  116. SymmetricAlgorithm TestCFB = new AesCryptoServiceProvider();
  117. TestCFB.Mode = CipherMode.CFB;
  118. TestCFB.Padding = PaddingMode.None;
  119. TestCFB.FeedbackSize = i;
  120. ICryptoTransform TransCFB = TestCFB.CreateEncryptor(CipherKey, CipherIV);
  121. MemoryStream StrCFB = new MemoryStream();
  122. CryptoStream CStrCFB = new CryptoStream(StrCFB, TransCFB, CryptoStreamMode.Write);
  123. CStrCFB.Write(Zero, 0, BlockSize);
  124. CStrCFB.FlushFinalBlock();
  125. StrCFB.Seek(0, SeekOrigin.Begin);
  126. StrCFB.Read(DataCFB, 0, BlockSize);
  127. CStrCFB.Close();
  128. StrCFB.Close();
  129. Console.WriteLine("CFB" + i.ToString().PadRight(3) + ": " + PrintData(DataCFB));
  130. }
  131. catch (Exception E)
  132. {
  133. Console.WriteLine("CFB" + i.ToString().PadRight(3) + ": " + E.Message);
  134. }
  135. }
  136.  
  137. try
  138. {
  139. SymmetricAlgorithm TestOFB = new AesCryptoServiceProvider();
  140. TestOFB.Mode = CipherMode.OFB;
  141. TestOFB.Padding = PaddingMode.None;
  142. ICryptoTransform TransOFB = TestOFB.CreateEncryptor(CipherKey, CipherIV);
  143. MemoryStream StrOFB = new MemoryStream();
  144. CryptoStream CStrOFB = new CryptoStream(StrOFB, TransOFB, CryptoStreamMode.Write);
  145. CStrOFB.Write(Zero, 0, BlockSize);
  146. CStrOFB.FlushFinalBlock();
  147. StrOFB.Seek(0, SeekOrigin.Begin);
  148. StrOFB.Read(DataOFB, 0, BlockSize);
  149. CStrOFB.Close();
  150. StrOFB.Close();
  151. Console.WriteLine("OFB: " + PrintData(DataOFB));
  152. }
  153. catch (Exception E)
  154. {
  155. Console.WriteLine("OFB: " + E.Message);
  156. }
  157. }
  158.  
  159. public static void Main(string[] args)
  160. {
  161. CipherTest();
  162. Console.ReadLine();
  163. return;
  164. }
  165. }
  166. }
Success #stdin #stdout 0.03s 25972KB
stdin
Standard input is empty
stdout
Key:    A0 0D B3 48 92 45 3A FB 53 3B A4 C4 A8 C6 88 FF 
IV:     6A F8 EF 8E 4C 8E 9C 87 CD 01 00 4D 80 13 BE 21 
ECB:    65 24 5D 9C 94 41 3F 8A 09 FF AD 53 40 24 E8 F7 
CBC:    65 24 5D 9C 94 41 3F 8A 09 FF AD 53 40 24 E8 F7 
CFB:    65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB0  : Specified feedback size is invalid.
CFB1  : Specified feedback size is invalid.
CFB2  : Specified feedback size is invalid.
CFB3  : Specified feedback size is invalid.
CFB4  : Specified feedback size is invalid.
CFB5  : Specified feedback size is invalid.
CFB6  : Specified feedback size is invalid.
CFB7  : Specified feedback size is invalid.
CFB8  : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB9  : Specified feedback size is invalid.
CFB10 : Specified feedback size is invalid.
CFB11 : Specified feedback size is invalid.
CFB12 : Specified feedback size is invalid.
CFB13 : Specified feedback size is invalid.
CFB14 : Specified feedback size is invalid.
CFB15 : Specified feedback size is invalid.
CFB16 : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB17 : Specified feedback size is invalid.
CFB18 : Specified feedback size is invalid.
CFB19 : Specified feedback size is invalid.
CFB20 : Specified feedback size is invalid.
CFB21 : Specified feedback size is invalid.
CFB22 : Specified feedback size is invalid.
CFB23 : Specified feedback size is invalid.
CFB24 : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB25 : Specified feedback size is invalid.
CFB26 : Specified feedback size is invalid.
CFB27 : Specified feedback size is invalid.
CFB28 : Specified feedback size is invalid.
CFB29 : Specified feedback size is invalid.
CFB30 : Specified feedback size is invalid.
CFB31 : Specified feedback size is invalid.
CFB32 : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB33 : Specified feedback size is invalid.
CFB34 : Specified feedback size is invalid.
CFB35 : Specified feedback size is invalid.
CFB36 : Specified feedback size is invalid.
CFB37 : Specified feedback size is invalid.
CFB38 : Specified feedback size is invalid.
CFB39 : Specified feedback size is invalid.
CFB40 : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB41 : Specified feedback size is invalid.
CFB42 : Specified feedback size is invalid.
CFB43 : Specified feedback size is invalid.
CFB44 : Specified feedback size is invalid.
CFB45 : Specified feedback size is invalid.
CFB46 : Specified feedback size is invalid.
CFB47 : Specified feedback size is invalid.
CFB48 : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB49 : Specified feedback size is invalid.
CFB50 : Specified feedback size is invalid.
CFB51 : Specified feedback size is invalid.
CFB52 : Specified feedback size is invalid.
CFB53 : Specified feedback size is invalid.
CFB54 : Specified feedback size is invalid.
CFB55 : Specified feedback size is invalid.
CFB56 : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB57 : Specified feedback size is invalid.
CFB58 : Specified feedback size is invalid.
CFB59 : Specified feedback size is invalid.
CFB60 : Specified feedback size is invalid.
CFB61 : Specified feedback size is invalid.
CFB62 : Specified feedback size is invalid.
CFB63 : Specified feedback size is invalid.
CFB64 : 65 8C 02 7B 3B 41 A5 65 EB E8 7E 19 7E DC A8 01 
CFB65 : Specified feedback size is invalid.
CFB66 : Specified feedback size is invalid.
CFB67 : Specified feedback size is invalid.
CFB68 : Specified feedback size is invalid.
CFB69 : Specified feedback size is invalid.
CFB70 : Specified feedback size is invalid.
CFB71 : Specified feedback size is invalid.
CFB72 : CFB with Feedbaack > 64 bits
CFB73 : Specified feedback size is invalid.
CFB74 : Specified feedback size is invalid.
CFB75 : Specified feedback size is invalid.
CFB76 : Specified feedback size is invalid.
CFB77 : Specified feedback size is invalid.
CFB78 : Specified feedback size is invalid.
CFB79 : Specified feedback size is invalid.
CFB80 : CFB with Feedbaack > 64 bits
CFB81 : Specified feedback size is invalid.
CFB82 : Specified feedback size is invalid.
CFB83 : Specified feedback size is invalid.
CFB84 : Specified feedback size is invalid.
CFB85 : Specified feedback size is invalid.
CFB86 : Specified feedback size is invalid.
CFB87 : Specified feedback size is invalid.
CFB88 : CFB with Feedbaack > 64 bits
CFB89 : Specified feedback size is invalid.
CFB90 : Specified feedback size is invalid.
CFB91 : Specified feedback size is invalid.
CFB92 : Specified feedback size is invalid.
CFB93 : Specified feedback size is invalid.
CFB94 : Specified feedback size is invalid.
CFB95 : Specified feedback size is invalid.
CFB96 : CFB with Feedbaack > 64 bits
CFB97 : Specified feedback size is invalid.
CFB98 : Specified feedback size is invalid.
CFB99 : Specified feedback size is invalid.
CFB100: Specified feedback size is invalid.
CFB101: Specified feedback size is invalid.
CFB102: Specified feedback size is invalid.
CFB103: Specified feedback size is invalid.
CFB104: CFB with Feedbaack > 64 bits
CFB105: Specified feedback size is invalid.
CFB106: Specified feedback size is invalid.
CFB107: Specified feedback size is invalid.
CFB108: Specified feedback size is invalid.
CFB109: Specified feedback size is invalid.
CFB110: Specified feedback size is invalid.
CFB111: Specified feedback size is invalid.
CFB112: CFB with Feedbaack > 64 bits
CFB113: Specified feedback size is invalid.
CFB114: Specified feedback size is invalid.
CFB115: Specified feedback size is invalid.
CFB116: Specified feedback size is invalid.
CFB117: Specified feedback size is invalid.
CFB118: Specified feedback size is invalid.
CFB119: Specified feedback size is invalid.
CFB120: CFB with Feedbaack > 64 bits
CFB121: Specified feedback size is invalid.
CFB122: Specified feedback size is invalid.
CFB123: Specified feedback size is invalid.
CFB124: Specified feedback size is invalid.
CFB125: Specified feedback size is invalid.
CFB126: Specified feedback size is invalid.
CFB127: Specified feedback size is invalid.
CFB128: CFB with Feedbaack > 64 bits
OFB:    OFB isn't supported by the framework