Encryption Error "Length of the data to decrypt is invalid"

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Jimski (jimski.brock_at_gmail.com)
Date: 03/14/05


Date: 14 Mar 2005 08:34:38 -0800

Hello all,

I am having a problem where I get an error message when I call
FlushFinalBlock when decrypting my encrypted text. I am using the
Rijndael algorithm.

The error message is "Length of the data to decrypt is invalid" and
occurs on the csDecrypt.FlushFinalBlock.

Please find below the two routines I use to encrypt my text and decrypt
the text. I have used the two routines in a very simple app that takes
a string from a label and then calls EncryptString and displays it on
another label. I then call DecryptString and pass it the contents of
the encrypted label text property.

The CryptKey is byte[32] and is set on creation of the object
containing these methods.

Could somebody please enlighten me as to what I am doing wrong!

Thanks in advance

Jimski

    public string EncryptString(string pText)
    {
      string strResult = "";

      try
      {
        // Create the rijndael encryptor
        ICryptoTransform encryptor =
_RijndaelEncryptor.CreateEncryptor();

        // Encrypt the data to the memory stream
        MemoryStream msEncrypt = new MemoryStream(pText.Length);
        CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor,
CryptoStreamMode.Write);

        // Convert the string to a byte array.
        byte[] beforeEncrypt = Encoding.UTF8.GetBytes(pText);

        // Write all the data to the crypto stream and flush it to the
MemoryStream.
        csEncrypt.Write(beforeEncrypt, 0, beforeEncrypt.Length);
        csEncrypt.FlushFinalBlock();

        // Read encrypted array of bytes from the MemoryStream
        byte[] afterEncrypt = new byte[msEncrypt.Length];
        msEncrypt.Position = 0;
        msEncrypt.Read(afterEncrypt, 0, afterEncrypt.Length);

        csEncrypt.Close();

        // Returns the encrypted text as a string
        strResult = Encoding.UTF8.GetString(afterEncrypt);
      }
      catch (Exception ex)
      {
        // An error occurred during encryption
      }
      return strResult;
    }

    public string DecryptString(string pEncryptedText)
    {
      string strResult = "";

      try
      {
        // Convert the string to a byte array.
        byte[] beforeDecrypt = Encoding.UTF8.GetBytes(pEncryptedText);

        // Create the rijndael decryptor
        ICryptoTransform decryptor =
_RijndaelEncryptor.CreateDecryptor();

        // decrypt the data to the memory stream
        MemoryStream msDecrypt = new
MemoryStream(beforeDecrypt.Length);
        CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor,
CryptoStreamMode.Write);

        // Write all the data to the crypto stream and flush it.
        csDecrypt.Write(beforeDecrypt, 0, beforeDecrypt.Length);
// ERROR occurs in this next line.
        csDecrypt.FlushFinalBlock();

        // Read decrypted array of bytes from the MemoryStream
        byte[] afterDecrypt = new byte[msDecrypt.Length];
        msDecrypt.Position = 0;
        msDecrypt.Read(afterDecrypt, 0, afterDecrypt.Length);

        csDecrypt.Close();

        // Returns the decrypted text as a string
        strResult = Encoding.UTF8.GetString(afterDecrypt);
      }
      catch (Exception ex)
      {
        // Show error - which in this case is "Length of the data to
decrypt is invalid"
      }

      return strResult;
    }



Relevant Pages

  • RE: NTE_BAD_DATA
    ... They are NOT used DIRECTLY to encrypt / decrypt data; ... you should generate a RANDOM SESSION KEY and select a SYMMETRIC ENCRYPTION ... // imported from a BLOB read in from the source file or having ...
    (microsoft.public.platformsdk.security)
  • Re: Back Doors
    ... >> Design into the system a master key. ... Encrypt that with public key. ... Decrypt random symmetric key with private key. ...
    (sci.crypt)
  • Re: CAPI and RC4: can not decrypt when Final parameter is set to F
    ... to store ASYMMETRIC key pairs - never symmetric keys like RC4, ... Now when you need to encrypt at one place and decrypt at the other normally ... Get a HCRYPTPROV handle to a key container with CryptAcquireContext ...
    (microsoft.public.platformsdk.security)
  • Re: RSA - Public vs. Private Keys
    ... This is a common pattern for license software ... your client will send a unique machine hash to the ... will let us decrypt with a Public Key (or simply not ... |> RSA is intended to encrypt messages with public keys only. ...
    (microsoft.public.dotnet.security)
  • Re: Encryption Error "Length of the data to decrypt is invalid"
    ... > Please find below the two routines I use to encrypt my text and decrypt ... > another label. ... > public string DecryptString ...
    (microsoft.public.dotnet.languages.csharp)