java crypto - BadPaddingException


I have a problem with encrypting/decrypting. Strangely enough the program is able to encrypt/decrypt for a few days, then it starts to fail on the decryption.

Here is the code:

public class DesEncrypter {
    Cipher ecipher;
    Cipher dcipher;

    // 8-byte Salt
    byte[] salt = {
        (byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,
        (byte)0x56, (byte)0x35, (byte)0xE3, (byte)0x03
    // Iteration count
    int iterationCount = 19;
    public final static String passPhrase = "b@a0b@r3f3er1adfgrg";
    public DesEncrypter() {
        try {
            // Create the key
            KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
            SecretKey key = SecretKeyFactory.getInstance(
            ecipher = Cipher.getInstance(key.getAlgorithm());
            dcipher = Cipher.getInstance(key.getAlgorithm());

            // Prepare the parameter to the ciphers
            AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);

            // Create the ciphers
            ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
            dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
        } catch ( e) {
        } catch ( e) {
        } catch (javax.crypto.NoSuchPaddingException e) {
        } catch ( e) {
        } catch ( e) {

    public String encrypt(String str) {
        try {
            // Encode the string into bytes using utf-8
            byte[] utf8 = str.getBytes("UTF8");

            // Encrypt
            byte[] enc = ecipher.doFinal(utf8);

            // Encode bytes to base64 to get a string
            return new sun.misc.BASE64Encoder().encode(enc);
        } catch (javax.crypto.BadPaddingException e) {
        } catch (IllegalBlockSizeException e) {
        } catch (UnsupportedEncodingException e) {
        return null;

    public String decrypt(String str) {
        try {
            // Decode base64 to get bytes
            byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);

            // Decrypt
            byte[] utf8 = dcipher.doFinal(dec);

            // Decode using utf-8
            return new String(utf8, "UTF8");
        } catch (javax.crypto.BadPaddingException e) {
        } catch (IllegalBlockSizeException e) {
        } catch (UnsupportedEncodingException e) {
        } catch ( e) {
        return null;

NOTE: I added some debug statements in each catch block above, and determined it's throwing the error in the decrypt for BadPaddingException, with the error "Given final block not properly padded".

One thing I noticed is I'm specifying "UTF8" but shouldn't that be "UTF-8" ? Why does the decyption work for awhile then starts failing?

I read through this post, but I still don't get it.

Who is Participating?
Siva Prasanna KumarConnect With a Mentor Principal Solutions ArchitectCommented:
about that utf-8 utf8 the only difference with respect to a web app is that utf-8 is a strict version of the utf8 as you are using a utf8 which is fine.

As its a web application and now the only thing you can do is just try logging the encrypted message and decrypted message and compare it with the same result prouded using a stand alone program.

just use some system outs in the web application you will get the result on to the console or logs.

and apply the same to the stand alone program.
Siva Prasanna KumarPrincipal Solutions ArchitectCommented:
>>decyption work for awhile then starts failing

When is it failing one you stop the program and then try decrypt the encrypted message in the next run????

actually according to me the whole problem is becuae of improper or inconsistent padding.

MaritimeSourceAuthor Commented:
This is running in a web application environment... the web server doesn't stop at all during this time, which is the confusing part.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.