c.dunlap
c.dunlap

Reputation: 600

Decrypt TripleDES "Bad Data"

I'm new to encryption/decryption. I'm trying to decrypt an input string that is encrypted and comes out to 44 characters.

This is what I have so far but I keep getting "bad data" when it attempts to execute the "TransformFinalBlock" function.

public static String Decrypt(String input)
    {
        try{
            byte[] inputArray = Convert.FromBase64String(input);
            TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
            tripleDES.KeySize = 128;
            tripleDES.Key = UTF8Encoding.UTF8.GetBytes("0123456789ABCDEF");
            tripleDES.IV = UTF8Encoding.UTF8.GetBytes("ABCDEFGH");
            tripleDES.Mode = CipherMode.ECB;
            tripleDES.Padding = PaddingMode.PKCS7;
            ICryptoTransform transform = tripleDES.CreateDecryptor();
            byte[] resultArray = transform.TransformFinalBlock(inputArray, 0, inputArray.Length);
            tripleDES.Clear();

            return UTF8Encoding.UTF8.GetString(resultArray);
        }
        catch(Exception except){
            Debug.WriteLine(except + "\n\n" + except.StackTrace);
            return null;
        }
    }

Upvotes: 3

Views: 8638

Answers (2)

Maarten Bodewes
Maarten Bodewes

Reputation: 93948

If you use an IV, then you should use CipherMode.CBC. ECB does not use any IV.

In addition, your data is not padded at all, it contains exactly 32 bytes. To test decryption, it is common to try without padding first. That way you can determine by eye which padding is used by looking at the resulting plaintext.

The plain data is too corny to print here, so I won't.

Upvotes: 5

Santiago Diaz
Santiago Diaz

Reputation: 31

I had a very similar issue and i fixed it by changing the PaddingMode to None

My CipherMode is ECB (Electronic code book).

Upvotes: 3

Related Questions