static void Main(string[] args) { byte[] key = ConvertHexStringToBytes(KEY); byte[] iv = ConvertHexStringToBytes(IV); for (int i = 2; i <= 5; i++) { try { PADDING = (PaddingMode)i; //Encrypt Byte[] encrypted = EncryptStringToBytes(PLAIN_TEXT, key, iv); //Decrypt string roundtrip = DecryptStringFromBytes(encrypted, key, iv); Console.WriteLine(PADDING.ToString() + " : " + Convert.ToBase64String(encrypted)); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
public static bool TestAlgorithms(SymmetricAlgorithm encAlgorithm, SymmetricAlgorithm decAlgorithm, CipherMode[] modes, int maxLength, int iterations) { Random rand = new Random(); for (int i = 0; i < iterations; i++) { // Create random data, key, IV, mode // byte[] key = new byte[KeySizeBytes[rand.Next(KeySizeBytes.Length)]]; rand.NextBytes(key); byte[] data = new byte[rand.Next(1, maxLength + 1)]; rand.NextBytes(data); byte[] IV = new byte[BlockSizeBytes]; rand.NextBytes(IV); CipherMode mode = modes[rand.Next(modes.Length)]; PaddingMode padding = PaddingModes[new Random().Next(PaddingModes.Length)]; // Encrypt the data // byte[] encryptedData; encAlgorithm.Key = key; encAlgorithm.IV = IV; encAlgorithm.Mode = mode; encAlgorithm.Padding = padding; ICryptoTransform transform = encAlgorithm.CreateEncryptor(); encryptedData = transform.TransformFinalBlock(data, 0, data.Length); // Decrypt the data // byte[] decryptedData; decAlgorithm.Key = key; decAlgorithm.IV = IV; decAlgorithm.Mode = mode; decAlgorithm.Padding = padding; transform = decAlgorithm.CreateDecryptor(); decryptedData = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length); if (!CompareBytes(data, decryptedData)) { Console.WriteLine("ERROR - roundtrip encrypt/decrypt failed!\n"); Console.WriteLine("Encryption algorithm: {0}", encAlgorithm.ToString()); Console.WriteLine("Decryption algorithm: {0}", decAlgorithm.ToString()); Console.WriteLine("Original data: {0}", ByteArrayToString(data)); Console.WriteLine("Roundtrip data: {0}", ByteArrayToString(decryptedData)); Console.WriteLine("Key: {0}", ByteArrayToString(key)); Console.WriteLine("IV: {0}", ByteArrayToString(IV)); Console.WriteLine("Cipher mode: {0}", mode.ToString()); Console.WriteLine("Padding mode: {0}", padding.ToString()); return(false); } } return(true); }
public void Probe(ProbeContext context) { var scope = context.CreateScope("aes"); scope.Add("paddingMode", _paddingMode.ToString()); _secureKeyProvider.Probe(scope); }
public static bool PaddingTest(Aes aes, PaddingMode mode, int offset, byte[] expected) { if (!CompareBytes(GetPaddingBytes(aes, mode, offset), expected)) { Console.WriteLine("Error - padding failure"); Console.WriteLine("Algorithm: {0}", aes.ToString()); Console.WriteLine("Padding Mode: {0}", mode.ToString()); Console.WriteLine("Block Size: {0}", BlockSizeBytes + offset); return(false); } return(true); }
public void Probe(ProbeContext context) { context.Add("defaultKeyId", _defaultKeyId); context.Add("paddingMode", _paddingMode.ToString()); }
public static bool PaddingTest(Aes aes, PaddingMode mode, int offset, byte[] expected) { if (!CompareBytes(GetPaddingBytes(aes, mode, offset), expected)) { Console.WriteLine("Error - padding failure"); Console.WriteLine("Algorithm: {0}", aes.ToString()); Console.WriteLine("Padding Mode: {0}", mode.ToString()); Console.WriteLine("Block Size: {0}", BlockSizeBytes + offset); return false; } return true; }
private void WriteByte (PaddingMode mode, bool padded) { byte[] Key = new byte[16]; byte[] IV = new byte[16]; byte[] Buffer = new byte[64]; Rijndael alg = Rijndael.Create (); alg.Mode = CipherMode.CBC; alg.Padding = mode; MemoryStream cms = new MemoryStream (); ICryptoTransform ct = alg.CreateEncryptor (Key, IV); CryptoStream cs = new CryptoStream (cms, ct, CryptoStreamMode.Write); for (int i = 0; i < Buffer.Length; i++) cs.WriteByte (Buffer[i]); cs.Close (); byte[] result = cms.ToArray (); // if padded then add one block, if not then it's the original length int len = padded ? 80: 64; Assert.AreEqual (len, result.Length, mode.ToString () + ".Encrypted.Length"); cms = new MemoryStream (); ct = alg.CreateDecryptor (Key, IV); cs = new CryptoStream (cms, ct, CryptoStreamMode.Write); for (int i = 0; i < result.Length; i++) cs.WriteByte (result[i]); cs.Close (); byte[] plaintext = cms.ToArray (); Assert.AreEqual (64, plaintext.Length, mode.ToString () + ".Decrypted.Length"); Assert.AreEqual (Buffer, plaintext, mode.ToString () + ".Date"); }
public Encrypter(string iv, string key, CipherMode mode = CipherMode.CBC, PaddingMode padding = PaddingMode.PKCS7, Func <string, string> hashProvider = null) { m_IV = Convert.FromBase64String(iv); m_Key = Convert.FromBase64String(key); m_Mode = mode; m_Padding = padding; m_HashProvider = hashProvider ?? CreateDefaultHashProvider(iv + key + mode.ToString() + padding.ToString()); }