C# / Windows Phone 7 - AES Encryption on WP7
You may already know that data-in-transit is secured via SSL. When calling a web service, however, the need may arise to encrypt and decrypt data. There are several cryptography algorithms on Windows Phone 7 that are supported, but we are providing a solid sample implementation using a 128-bit block size and 128-bit key size. AESManaged has a fixed block size of 128 bits and a key size of 128, 192, or 256 bits. Also, the Cipher Mode is defaulted to CBC, with a PKCS7 Padding.
class AES { public static byte[] Encrypt (byte[] data, byte[] key, byte[] iv) { if (data == null || data.Length <= 0) throw new ArgumentNullException("data"); if (key == null || key.Length <= 0) throw new ArgumentNullException("key"); if (iv == null || iv.Length <= 0) throw new ArgumentNullException("key"); byte[] encrypted; using (AesManaged AESM = new AesManaged()) { // Defaults // CipherMode = CBC // Padding = PKCS7 AESM.KeySize = 128; AESM.BlockSize = 128; AESM.Key = key; AESM.IV = iv; ICryptoTransform encryptor = AESM.CreateEncryptor(); encrypted = encryptor.TransformFinalBlock(data, 0, data.Length); } return encrypted; } public static byte[] Decrypt (byte[] cipherText, byte[] key, byte[] iv) { if (cipherText == null || cipherText.Length <= 0) throw new ArgumentNullException("cipherText"); if (key == null || key.Length <= 0) throw new ArgumentNullException("key"); if (iv == null || iv.Length <= 0) throw new ArgumentNullException("key"); byte[] decrypted; using (AesManaged AESM = new AesManaged()) { // Defaults // CipherMode = CBC // Padding = PKCS7 AESM.KeySize = 128; AESM.BlockSize = 128; AESM.Key = key; AESM.IV = iv; ICryptoTransform decryptor = AESM.CreateDecryptor(); decrypted = decryptor.TransformFinalBlock(cipherText, 0, cipherText.Length); } return decrypted; } }Click here to download the source code of an example application that demonstrates encryption and decryption using the above AES class.
Comments