using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Security.Cryptography; using System.Text; namespace UniCryptTester { class MainClass { static Random Rnd = new Random(); public static string PrintData(byte[] Data) { StringBuilder S = new StringBuilder(); for (int i = 0; i < Data.Length; i++) { S.Append(Data[i].ToString("X").PadLeft(2, '0')); S.Append(" "); } return S.ToString(); } public static void CipherTest() { int BlockSize = 16; byte[] Zero = new byte[BlockSize]; byte[] DataECB = new byte[BlockSize]; byte[] DataCBC = new byte[BlockSize]; byte[] DataCFB = new byte[BlockSize]; byte[] DataOFB = new byte[BlockSize]; byte[] CipherKey = new byte[16]; byte[] CipherIV = new byte[BlockSize]; Rnd.NextBytes(CipherKey); Rnd.NextBytes(CipherIV); for (int i = 0; i < BlockSize; i++) { Zero[i] = 0; DataECB[i] = 0; DataCBC[i] = 0; DataCFB[i] = 0; DataOFB[i] = 0; } Console.WriteLine("Key: " + PrintData(CipherKey)); Console.WriteLine("IV: " + PrintData(CipherIV)); try { SymmetricAlgorithm TestECB = new AesCryptoServiceProvider(); TestECB.Mode = CipherMode.ECB; TestECB.Padding = PaddingMode.None; ICryptoTransform TransECB = TestECB.CreateEncryptor(CipherKey, Zero); MemoryStream StrECB = new MemoryStream(); CryptoStream CStrECB = new CryptoStream(StrECB, TransECB, CryptoStreamMode.Write); CStrECB.Write(CipherIV, 0, BlockSize); CStrECB.FlushFinalBlock(); StrECB.Seek(0, SeekOrigin.Begin); StrECB.Read(DataECB, 0, BlockSize); CStrECB.Close(); StrECB.Close(); Console.WriteLine("ECB: " + PrintData(DataECB)); } catch (Exception E) { Console.WriteLine("ECB: " + E.Message); } try { SymmetricAlgorithm TestCBC = new AesCryptoServiceProvider(); TestCBC.Mode = CipherMode.CBC; TestCBC.Padding = PaddingMode.None; ICryptoTransform TransCBC = TestCBC.CreateEncryptor(CipherKey, CipherIV); MemoryStream StrCBC = new MemoryStream(); CryptoStream CStrCBC = new CryptoStream(StrCBC, TransCBC, CryptoStreamMode.Write); CStrCBC.Write(Zero, 0, BlockSize); CStrCBC.FlushFinalBlock(); StrCBC.Seek(0, SeekOrigin.Begin); StrCBC.Read(DataCBC, 0, BlockSize); CStrCBC.Close(); StrCBC.Close(); Console.WriteLine("CBC: " + PrintData(DataCBC)); } catch (Exception E) { Console.WriteLine("CBC: " + E.Message); } try { SymmetricAlgorithm TestCFB = new AesCryptoServiceProvider(); TestCFB.Mode = CipherMode.CFB; TestCFB.Padding = PaddingMode.None; ICryptoTransform TransCFB = TestCFB.CreateEncryptor(CipherKey, CipherIV); MemoryStream StrCFB = new MemoryStream(); CryptoStream CStrCFB = new CryptoStream(StrCFB, TransCFB, CryptoStreamMode.Write); CStrCFB.Write(Zero, 0, BlockSize); CStrCFB.FlushFinalBlock(); StrCFB.Seek(0, SeekOrigin.Begin); StrCFB.Read(DataCFB, 0, BlockSize); CStrCFB.Close(); StrCFB.Close(); Console.WriteLine("CFB: " + PrintData(DataCFB)); } catch (Exception E) { Console.WriteLine("CFB: " + E.Message); } for (int i = 0; i <= 128; i++) { try { SymmetricAlgorithm TestCFB = new AesCryptoServiceProvider(); TestCFB.Mode = CipherMode.CFB; TestCFB.Padding = PaddingMode.None; TestCFB.FeedbackSize = i; ICryptoTransform TransCFB = TestCFB.CreateEncryptor(CipherKey, CipherIV); MemoryStream StrCFB = new MemoryStream(); CryptoStream CStrCFB = new CryptoStream(StrCFB, TransCFB, CryptoStreamMode.Write); CStrCFB.Write(Zero, 0, BlockSize); CStrCFB.FlushFinalBlock(); StrCFB.Seek(0, SeekOrigin.Begin); StrCFB.Read(DataCFB, 0, BlockSize); CStrCFB.Close(); StrCFB.Close(); Console.WriteLine("CFB" + i.ToString().PadRight(3) + ": " + PrintData(DataCFB)); } catch (Exception E) { Console.WriteLine("CFB" + i.ToString().PadRight(3) + ": " + E.Message); } } try { SymmetricAlgorithm TestOFB = new AesCryptoServiceProvider(); TestOFB.Mode = CipherMode.OFB; TestOFB.Padding = PaddingMode.None; ICryptoTransform TransOFB = TestOFB.CreateEncryptor(CipherKey, CipherIV); MemoryStream StrOFB = new MemoryStream(); CryptoStream CStrOFB = new CryptoStream(StrOFB, TransOFB, CryptoStreamMode.Write); CStrOFB.Write(Zero, 0, BlockSize); CStrOFB.FlushFinalBlock(); StrOFB.Seek(0, SeekOrigin.Begin); StrOFB.Read(DataOFB, 0, BlockSize); CStrOFB.Close(); StrOFB.Close(); Console.WriteLine("OFB: " + PrintData(DataOFB)); } catch (Exception E) { Console.WriteLine("OFB: " + E.Message); } } public static void Main(string[] args) { CipherTest(); Console.ReadLine(); return; } } }
Standard input is empty
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