Tarun

Tarun

  • 1.3k
  • 447
  • 16.9k

Aes256 Encryption and Decryption

Apr 26 2023 11:02 AM

Padding is invalid and cannot be removed come this error ..

My code is 

public static byte[] EncryptStringToBytes(string str, byte[] key)
        {
            byte[] encrypted;

            using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
            {

                key =aes.Key;
                aes.GenerateIV(); // The get method of the 'IV' property of the 'SymmetricAlgorithm' automatically generates an IV if it is has not been generate before. 

                aes.Mode = CipherMode.CBC;
                aes.Padding = PaddingMode.PKCS7;

                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    msEncrypt.Write(aes.IV, 0, aes.IV.Length);
                    ICryptoTransform encoder = aes.CreateEncryptor();
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encoder, CryptoStreamMode.Write))
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(str);
                    }
                    encrypted = msEncrypt.ToArray();
                }
            }

            return encrypted;

        }


        static string DecryptStringFromBytes(byte[] cipherText, byte[] key)
        {
            string decrypted ;
            using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
            {
                // Setting a key size disposes the previously-set key. 
                // Setting a key size will generate a new key. 
                // Setting a key size is redundant if a key going to be set after this statement. 
               

                key = aes.Key;
                aes.Mode = CipherMode.CBC;
                aes.Padding = PaddingMode.PKCS7;

                //ICryptoTransform decoder = aes.CreateDecryptor(aes.Key, aes.IV);
                using (MemoryStream msDecryptor = new MemoryStream(cipherText))
                {
                    byte[] IV = new byte[16];
                    msDecryptor.Read(IV,0,  16);
                    aes.IV = IV;
                    //ICryptoTransform decoder = aes.CreateDecryptor(aes.Key,aes.IV );
                   ICryptoTransform decoder = aes.CreateDecryptor();
                    using (CryptoStream csDecryptor = new CryptoStream(msDecryptor, decoder, CryptoStreamMode.Read))
                    
                        using (StreamReader srReader = new StreamReader(csDecryptor))
                        {

                              //csDecryptor.FlushFinalBlock();
                            decrypted = srReader.ReadToEnd();
                            

                        }
                    
                }
            }
            return decrypted;
        }

 

please verify code and help me fast !!!!


Answers (1)