On Fri, 2009-01-30 at 12:27 -0500, David Wolinsky wrote: > Hey guys, > > Just wanted to let you know a behavioral difference between .Net and > Mono and potentially get advice from you. The method > SA.CreateEncryptor.TransformFinalBlock() differs on the two platforms. > Specifically, Mono appears to continue from where the last one ended, > whereas .Net repeats itself (i.e. the IV is the same IV you inserted > when the ICryptoTransform was created). > > Below is a sample. > > using System; > using System.Security.Cryptography; > > public class tdes_test { > public static void Main() { > RijndaelManaged rm = new RijndaelManaged(); > byte[] key = new byte[rm.KeySize / 8]; > for(int i = 0; i < key.Length; i++) { > key[i] = (byte) i; > } > byte[] iv = new byte[rm.BlockSize / 8]; > for(int i = 0; i < iv.Length; i++) { > iv[i] = (byte) i; > } > ICryptoTransform encryptor = rm.CreateEncryptor(key, iv); > byte[] data = new byte[111]; > for(int i = 0; i < data.Length; i++) { > data[i] = (byte) i; > } > > byte[] encrypted_data = encryptor.TransformFinalBlock(data, 0, > data.Length); > for(int i = 0; i < encrypted_data.Length; i++) { > Console.Write(encrypted_data[i]); > } > Console.WriteLine("\n"); > encrypted_data = encryptor.TransformFinalBlock(data, 0, data.Length); > for(int i = 0; i < encrypted_data.Length; i++) { > Console.Write(encrypted_data[i]); > } > } > } > > > We're currently using this on a datagram security system and on Mono > (not sure if .Net is the same) creation of Encryptors and Decryptors is > expensive. Any thoughts or suggestions?
Your code should always* look at ICryptoTransform.CanReuseTransform before reusing a transform. If false then it cannot be reused. * since you should be using the factory methods to create ciphers (e.g. Rijndael.Create) and you can't be sure what exact class the runtime will instantiate (nor it's behavior). Sebastien _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list