Thanks Edward, I have marked the BouncyCastle tests as ignored for now. This project is a Portable Class library so I do not have access to the AesManaged class in the project. I will continue with the PCLCrypto library for now. What is the best mechanism to stay informed about the possible fix to the current issue?
Regards Jaco -----Original Message----- From: Edward Ned Harvey (bouncycastle) [mailto:bouncycas...@nedharvey.com] Sent: Tuesday, 16 February 2016 19:45 To: Jaco De Villiers <jac...@infoslips.com> Cc: dev-crypto-csharp@bouncycastle.org Subject: RE: EXTRA BYTES AT THE END OF ENCRYPTED DATA > From: Jaco De Villiers [mailto:jac...@infoslips.com] > > BouncyCastle actually created the extra block in encryption, and > expects it again in decryption, because if I strip the extra block > then it doesn't decrypt. Correct. If your data is, for example, 0xFF00.FF00, and you zero-pad it to 16 bytes, it will be 0xFF00.FF00.0000.0000.0000.0000.0000.0000 before it gets encrypted to some ciphertext block of 16 bytes. Then, you'll decrypt the ciphertext, to again retrieve the 16 bytes that include zero padding. *After* decryption, you need to eliminate the extra zeroes from the end of your data. In this example, the data ends with 00, so you'll need some external way to determine the number of bytes to strip off the end. I see what's causing your confusion though - I noticed that if the input is a multiple of 16 bytes long, it gets padded with a whole block of all zeroes, which I'm pretty sure shouldn't happen. I'll post a separate email to the list about it, as I'm pretty sure that's a bug, and it will be easier to create a separate thread to discuss it. In the meantime, since you're using ECB mode, you can just recognize that whenever your plaintext is a multiple of 16 bytes long, it will come out with ciphertext that is 16 bytes extra long (you can discard the last 16 bytes). During decryption, you might need to specify no padding. Alternatively, you might be able to use the .NET AesManaged class (instead of bouncycastle AesEngine).