using System; using System.Security.Cryptography; using System.Text; public class Test { static void Main( string[] args ) { string data = "hello"; Encrypt(data); } static void Encrypt( string data ) { PaddingMode padding = PaddingMode.PKCS7; CipherMode cipherMode = CipherMode.ECB; int size = 128; Console.WriteLine("input: '" + data + "'"); string officialKey = "9840822c-14fc-49ac-9d68-ac532f9f171e"; Console.WriteLine("key: '" + officialKey + "'"); Console.WriteLine("block size: '16'"); Console.WriteLine( "padding: '11'" ); var utf8dataBytes = Encoding.UTF8.GetBytes(data); var utf8data = Encoding.UTF8.GetString(utf8dataBytes); Console.WriteLine("utf8 json: '" + utf8data + "'"); Console.WriteLine("encoded key (utf8): " + officialKey); var utf8KeyBytes = Encoding.UTF8.GetBytes(officialKey); var myMD5 = MD5.Create(); var md5HashOfKey = myMD5.ComputeHash(utf8KeyBytes); Console.WriteLine( "md5 hash of key (raw): " + DumpBinary(md5HashOfKey) ); Console.WriteLine("md5 hash of key (base64): " + Convert.ToBase64String(md5HashOfKey)); Console.WriteLine("BitConverter.ToString(md5HashOfKey): " + BitConverter.ToString(md5HashOfKey)); Console.WriteLine("BitConverter.ToString(md5HashOfKey).Replace(): " + BitConverter.ToString(md5HashOfKey).Replace("-","")); byte[] encryptedBlob = null; using ( var aes = new AesManaged() ) { try { aes.Padding = PaddingMode.PKCS7; aes.Mode = CipherMode.ECB; aes.KeySize = 256; aes.BlockSize = 128; aes.Key = Encoding.ASCII.GetBytes(BitConverter.ToString(md5HashOfKey).Replace("-","").ToLower()); //aes.IV = new byte[] { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; var bytes = utf8dataBytes; //var bytes = ForcePaddingManually( utf8dataBytes ); var cxform = aes.CreateEncryptor(); encryptedBlob = cxform.TransformFinalBlock( bytes, 0, bytes.Length ); Console.WriteLine("finished" + encryptedBlob.Length); } catch (Exception e) { Console.WriteLine("{0} Exception caught.", e); } finally { aes.Clear(); } } //var encryptedBlob = AesAlgo.Encrypt( data, md5HashOfKey, padding, cipherMode, size ); Console.WriteLine("mcrypt (raw): " + DumpBinary(encryptedBlob)); Console.WriteLine("mcrypt: " + Encoding.UTF8.GetString(encryptedBlob)); var encryptedBase64 = Convert.ToBase64String(encryptedBlob); Console.WriteLine( "presid: " + encryptedBase64 ); var encodedEncryptedBlob = encryptedBase64.Replace( "+", "-" ).Replace( "/", "_" ); Console.WriteLine( "sid: " + encodedEncryptedBlob ); Console.WriteLine("COMPLETE!"); } static byte[] ForcePaddingManually( byte[] data ) { // force padding manually to test that PKCS7 works like we are expecting var pad = ( 16 - data.Length % 16 ) % 16; var bytes = new byte[data.Length + pad]; for ( int i = 0; i < data.Length; ++i ) { bytes[i] = data[i]; } for ( int i = data.Length; i < data.Length + pad; ++i ) { bytes[i] = (byte)pad; } return bytes; } static string DumpBinary( byte[] data ) { var sb = new StringBuilder(); for ( int i = 0; i < data.Length; ++i ) { sb.Append( data[i].ToString( "X2" ) ); } return sb.ToString(); } }