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

Popular posts from this blog

C# - ListView Item Spacing (Padding)

C# / SQL - Performing Distributed Transactions

IIS / ASP.NET - Disabling Compatibility Mode/View (Internet Explorer)