I\'m working on a security application using my own customized cryptography method, and having a problem on message decryption.
According to the theory, the input has to
You should use a padding such as Cipher.getInstance("AES/CBC/PKCS5Padding")
. Zero padding, as you are now using, has got the problem that you cannot distinguish between a plain text ending with 00
valued bytes and the padding. If you perform unpadding then you will at least have trouble with the final block. Of course, with text you can just removed the 00
valued bytes at the end before you perform the character decoding routine. Another method is to simply add a 64-bit size indicator at the start of your plain text.
Note that the default Oracle Java providers do not have zero padding options (as far as I know) so you either have to do the unpadding yourself, or you will have to use another JCE provider such as the Bouncy Castle provider that does include zero padding options (e.g. for Cipher.getInstance("AES/CBC/ZeroPadding")
.
Note that the Wikipedia page on padding has much to say on the matter. Also note that CBC mode does not provide integrity protection or authentication by itself, only confidentiality and only if used correctly.