I have 24 bytes of data encrypted using C# (RC2, 40bit Key, 64 bit Blocksize, CBC Mode, Probably PKCS7, IV + Salt) and I have to decrypt it using Java. My testing decryption implementation in C# already worjks but the Java one doesn't.
Using the BouncyCastle library, I have implemented the following code:
RC2ParameterSpec rc2Spec = new RC2ParameterSpec(40, IV);
Cipher c2 = Cipher.getInstance("RC2/CBC/PKCS7Padding", "BC"); // PBEWithMD5AndRC2
SecureRandom secRand = new SecureRandom(salt);
c2.init(Cipher.DECRYPT_MODE, cKey, rc2Spec, secRand);
decryptedMessage = c2.doFinal(bufferEncrypted);
I get the exception:
javax.crypto.BadPaddingException: pad block corrupted
at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(DashoA12275)
[...]
Does anyone knows something aboutt his issue? Maybe the padding mode PKCS7 is wrong, but the (working) C# Code tells me that....
RC2CryptoServiceProvider rc2;
rc2 = new RC2CryptoServiceProvider();
rc2.Mode = CipherMode.CBC;
rc2.KeySize = 40;
rc2.EffectiveKeySize = 40;
rc2.BlockSize = 64;
rc2.FeedbackSize = 8;
rc2.IV = IV;
rc2.UseSalt = true;
rc2.Key = bufferKey;
rtBox.AppendText("padding: " + rc2.Padding + "\n"); // Shows "PKCS7"
ICryptoTransform decryptor = rc2.CreateDecryptor();
byte[] bufferDecoded = new byte[16/*bufferData.Length*/];
MemoryStream ms = new MemoryStream(bufferEncrypted);
CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
cs.Read(bufferDecoded, 0, bufferDecoded.Length);
I would be very glad if someone could help?
But please don't propose a different encryption algorithm. The data is encrypted by someone else and I don't have any influence on that!