I've got weird problem because only SOMETIMES I'm getting exepction
Padding is invalid and cannot be removed.
Why am I getting it? It is Windows Phone 8.0 project. I have searched and found that I should add this
aesManaged.Padding = PaddingMode.None but it's WP8 and it doesnt have got PaddingMode.
public LoginView() { this.InitializeComponent(); try { string original = "Here is some data to encrypt!"; AesManaged myAes = new AesManaged(); byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV); Console.WriteLine("Original: {0}", original); var str = System.Text.Encoding.Unicode.GetString(encrypted,0,encrypted.Length); var str1 = System.Text.Encoding.Unicode.GetBytes(str); AesManaged myAes1 = new AesManaged(); myAes1.Key = myAes.Key; myAes1.IV = myAes.IV; myAes.Clear(); string roundtrip = DecryptStringFromBytes_Aes(str1, myAes1.Key, myAes1.IV); // HERE IS EXCEPTION Console.WriteLine("Round Trip: {0}", roundtrip); } catch (Exception e) { Console.WriteLine("Error: {0}", e.Message); } } static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV) { // Check arguments. if (plainText == null || plainText.Length <= 0) throw new ArgumentNullException("plainText"); if (Key == null || Key.Length <= 0) throw new ArgumentNullException("Key"); if (IV == null || IV.Length <= 0) throw new ArgumentNullException("Key"); byte[] encrypted; // Create an AesManaged object // with the specified key and IV. using (AesManaged aesAlg = new AesManaged()) { aesAlg.Key = Key; aesAlg.IV = IV; // Create a decrytor to perform the stream transform. ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for encryption. using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { //Write all data to the stream. swEncrypt.Write(plainText); } encrypted = msEncrypt.ToArray(); } } } // Return the encrypted bytes from the memory stream. return encrypted; } static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV) { // Check arguments. 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"); // Declare the string used to hold // the decrypted text. string plaintext = null; // Create an AesManaged object // with the specified key and IV. using (AesManaged aesAlg = new AesManaged()) { aesAlg.Key = Key; aesAlg.IV = IV; // Create a decrytor to perform the stream transform. ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for decryption. using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { // Read the decrypted bytes from the decrypting stream // and place them in a string. plaintext = srDecrypt.ReadToEnd(); } } } } return plaintext; }
System.Convert) and from a string back to a byte array.