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).

Reply via email to