Search code examples
javac#bouncycastle3des

C# DESede Symmetric ECB Encryption (I am so close - slightly differing characters)!


My output that I have to match is from Java DESede using a BouncyCastle Jar from 2005 ... I am very close...

Here is my output in Java (which is correct) followed by my output in C# ... if you view in an editor, you will see they ALMOST match, except in C# where it has a forward slash "/" in Java it has "%2F", "%2D" and at the end where C# has is an "=" , Java has "%3D". Any ideas? (I added spaces to show they match up - but you will only see them in an editor.)

F3e8sdZ%2F951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp%2BDzIbrf2J2dPpXyEXL2QU%3D (Java - Correct)

F3e8sdZ/ 951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp+ DzIbrf2J2dPpXyEXL2QU= (C# - Close?)

Here is my C# Code:

public static string DoubleTrippleDESede(string strToEncode, ref string symKey, ref ICryptoTransform cipher)
    {
        try
        {
            //byte[] input = Encoding.UTF8.GetBytes("DESede (3DES) Encryption in RAILO CFML");
            byte[] input = Encoding.UTF8.GetBytes(strToEncode);
            //byte[] key = Convert.FromBase64String("ru8femXhTm9jwdGdhb/4Sw==");
            byte[] key = Convert.FromBase64String(symKey);
            TripleDESCryptoServiceProvider algorithm = new TripleDESCryptoServiceProvider();
            algorithm.Mode = CipherMode.ECB;
            algorithm.BlockSize = 64;
            algorithm.KeySize = 192; // 24 byte key
            algorithm.Key = key; //Original
            //algorithm.Key = key.CopyTo(algorithm.Key,)
            cipher = algorithm.CreateEncryptor();
            byte[] encrypted = cipher.TransformFinalBlock(input, 0, input.Length);
            Debug.WriteLine("encrypted (.NET): {0}", Convert.ToBase64String(encrypted));
            return Convert.ToBase64String(encrypted);
        }
        catch (Exception ex)
        {
            return ex.Message;
        } 
    }

Any guidance would be greatly appreciated!!!! I've been at this for 2 weeks and finally can taste victory (I think!?)


Solution

  • Your Java output appears to have additionally been urlencoded. You should be able to call System.Uri.EscapeDataString() to match your present output.