RSA data decryption error. The data to be decrypted exceeds the maximum 64 bytes for this module

when encrypting and describing a string using the rsa provider. I am getting this error.

RSA data decryption error. The data to be decrypted exceeds the maximum 64 bytes for this module.

Can anyone think about how to move this error?

    internal sealed class RSAProvider
    {
        #region key store class

        [Serializable]
            private struct rsaKey
        {
            public rsaKey (RSAParameters rsaKeyInfo)
            {
                D = rsaKeyInfo.D;
                DP = rsaKeyInfo.DP;
                DQ = rsaKeyInfo.DQ;
                Exponent = rsaKeyInfo.Exponent;
                InverseQ = rsaKeyInfo.InverseQ;
                Modulus = rsaKeyInfo.Modulus;
                P = rsaKeyInfo.P;
                Q = rsaKeyInfo.Q;
            }

            public RSAParameters CreateRSAKey ()
            {
                RSAParameters rsaKeyInfo = new RSAParameters ();

                rsaKeyInfo.D = D;
                rsaKeyInfo.DP = DP;
                rsaKeyInfo.DQ = DQ;
                rsaKeyInfo.Exponent = Exponent;
                rsaKeyInfo.InverseQ = InverseQ;
                rsaKeyInfo.Modulus = Modulus;
                rsaKeyInfo.P = P;
                rsaKeyInfo.Q = Q;

                return rsaKeyInfo;
            }

            public byte [] D;
            public byte [] DP;
            public byte [] DQ;
            public byte [] Exponent;
            public byte [] InverseQ;
            public byte [] Modulus;
            public byte [] P;
            public byte [] Q;
        }

        #endregion

        private static RSAParameters rsaKeyParameters;

        static RSAProvider ()
        {
            string rsaKeyString = System.Configuration.ConfigurationSettings.AppSettings ["RSAKey"];
            if (rsaKeyString! = null)
            {
                rsaKeyParameters = GetKeyByString (rsaKeyString);
            }
        }

        private RSAProvider ()
        {
        }

        private static RSAParameters RSAKeyInfo
        {
            get
            {
                return rsaKeyParameters;
            }
        }

        private static bool DoOAEPPadding
        {
            get
            {
                return false;
            }
        }

        public static string GenerateKey (int keySize)
        {
            // Create a new instance of RSACryptoServiceProvider to generate
            // public and private key data.
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider (keySize);

            RSAParameters rsaKeyInfo = RSA.ExportParameters (true);

            return GetKeyString (rsaKeyInfo);
        }


        #region Encrypt

        public static byte [] Encrypt (byte [] dataToEncrypt, string rsaKeyString)
        {
            RSAParameters rsaKeyInfo = GetKeyByString (rsaKeyString);

            return Encrypt (dataToEncrypt, rsaKeyInfo);
        }

        public static byte [] Encrypt (byte [] dataToEncrypt, RSAParameters rsaKeyInfo)
        {
            try
            {   
                // Create a new instance of RSACryptoServiceProvider.
               // Common.Identity.ImpersonateValidUser ("prana", "eetplpvt", "Avdhoota1985");
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider ();

                // Import the RSA Key information. This only needs
                // toinclude the public key information.
                RSA.ImportParameters (rsaKeyInfo);

                // Encrypt the passed byte array and specify OAEP padding.  
                // OAEP padding is only available on Microsoft Windows XP or
                // later.  
                // return RSA.Encrypt (dataToEncrypt, DoOAEPPadding);
                byte [] data = RSA.Encrypt (dataToEncrypt, DoOAEPPadding);
                RSA.Clear ();
                //Common.Identity.UndoImpersonation ();
                return data;
            }
                // Catch and display a CryptographicException  
                // to the console.
            catch (CryptographicException e)
            {
                // Updated By Divya Bhalodia on 27th June 2008 for Localization task
                // throw new Exception ("Data encryption error.", e);
                Common.EnumLocalization.EnumLocalization loc = new Common.EnumLocalization.EnumLocalization (ASP.BL.ApplicationUsers.ApplicationUserController.CurrentUserCulture.Code, ASP.BL.Applications.ApplicationController.CurrentApplicationInfo.ItemId);
                throw new Exception (loc.LocalizeString ("RSA Data encryption error.") + e.Message, e);
                // end Updated - Divya
            }
        }

        public static byte [] Encrypt (byte [] dataToEncrypt)
        {
            return Encrypt (dataToEncrypt, RSAKeyInfo);
        }

        #endregion

        #region Decrypt

        public static byte [] Decrypt (byte [] dataToDecrypt, string rsaKeyString, bool doOAEPPadding)
        {
            RSAParameters rsaKeyInfo = GetKeyByString (rsaKeyString);
            return Decrypt (dataToDecrypt, rsaKeyInfo, doOAEPPadding);
        }

        public static byte [] Decrypt (byte [] dataToDecrypt, RSAParameters rsaKeyInfo, bool doOAEPPadding)
        {
            try
            {
                // Create a new instance of RSACryptoServiceProvider.
                Common.Identity.ImpersonateValidUser ();
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider ();

                // Import the RSA Key information. This needs
                // to include the private key information.
                RSA.ImportParameters (rsaKeyInfo);

                // Decrypt the passed byte array and specify OAEP padding.  
                // OAEP padding is only available on Microsoft Windows XP or
                // later.  
                // return RSA.Decrypt (dataToDecrypt, doOAEPPadding);
                byte [] data = RSA.Decrypt (dataToDecrypt, doOAEPPadding);
                RSA.Clear ();
                Common.Identity.UndoImpersonation ();
                return data;
            }
                // Catch and display a CryptographicException  
                // to the console.
            catch (CryptographicException e)
            {

                // Updated By Divya Bhalodia on 27th June 2008 for Localization task
                // throw new Exception ("Data decryption error.", e);
                Common.EnumLocalization.EnumLocalization loc = new Common.EnumLocalization.EnumLocalization (ASP.BL.ApplicationUsers.ApplicationUserController.CurrentUserCulture.Code, ASP.BL.Applications.ApplicationController.CurrentApplicationInfo.ItemId);
                throw new Exception (loc.LocalizeString ("RSA Data decryption error.") + e.Message, e);
                // end Updated - Divya
            }
        }

        public static byte [] Decrypt (byte [] dataToDecrypt)
        {
            return Decrypt (dataToDecrypt, RSAKeyInfo, DoOAEPPadding);
        }
        #endregion

        #region Additional functions

        private static string GetKeyString (RSAParameters rsaKeyInfo)
        {
            byte [] tmp;
            rsaKey k = new rsaKey (rsaKeyInfo);
            BinaryFormatter formater = new BinaryFormatter ();

            using (MemoryStream stream = new MemoryStream ())
            {
                formater.Serialize (stream, k);
                tmp = stream.ToArray ();
            }

            Code (tmp);

            return Convert.ToBase64String (tmp);
        }


        private static RSAParameters GetKeyByString (string rsaKeyString)
        {
            rsaKey k;

            byte [] tmp = Convert.FromBase64String (rsaKeyString);
            Code (tmp);

            BinaryFormatter formater = new BinaryFormatter ();

            using (MemoryStream stream = new MemoryStream (tmp))
            {
                k = (rsaKey) formater.Deserialize (stream);
            }
            return k.CreateRSAKey ();
        }


        private static void Code (byte [] tmp)
        {
            byte mask1 = 0x55;
            byte mask3 = 0xB9;
            byte mask4 = 0xCF;

            for (int i = 0; i 
0


a source to share


1 answer


I've used similar problems, but you can do two things to help them overcome them.

  • You need to make sure that the hte data you are encrypting is shorter than the key you are using. so if your key is 1024 bits, make sure you only bass, for example 1000 bits. To do this, you need to assemble a chunk of the byte array into smaller chunks, encrypt each chunk, and then store the encrypeted value in the array or string. So instead of encrypting 1 line, you encrypt 5 lines.

When storing this information as a string, make sure that all numbers are the same length, so if the formatting returns 15, you store the string with 015 to just divide by 3 later to get a byte to then insert into the array.



To decrypt your data, you just need to read the length of the string and determine how many chunks you need to decrypt. Unlock them one at a time and then you can recreate the object with a defragmented byte array.

if you want the real code please contact me personally and I can help you with some script that can do it for you.

0


a source







All Articles