title: javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes
body: <p>i am getting this error while decryption i have go through the similar posts but i did not get any help from there. I want to store an object directly in a file with encryption for that i have posted my question <a href="https://stackoverflow.com/questions/25399785/encrypt-complete-object-with-triple-des/25400892#25400892">here</a>. But while using stream i am getting the same error as i am getting with string.  </p>
  
  <pre><code>package security;
  
  import java.security.spec.KeySpec;
  
  import javax.crypto.Cipher;
  import javax.crypto.SecretKey;
  import javax.crypto.SecretKeyFactory;
  import javax.crypto.spec.DESedeKeySpec;
  import sun.misc.BASE64Decoder;
  import sun.misc.BASE64Encoder;
  
  /**
   * This class defines methods for encrypting and decrypting using the Triple DES
   * algorithm and for generating, reading and writing Triple DES keys. It also
   * defines a main() method that allows these methods to be used from the command
   * line.
   */
  public class TripleDesEncryptionDecryption {
    /**
     * The program. The first argument must be -e, -d, or -g to encrypt,
     * decrypt, or generate a key. The second argument is the name of a file
     * from which the key is read or to which it is written for -g. The -e and
     * -d arguments cause the program to read from standard input and encrypt or
     * decrypt to standard output.
     */
      private static final String UNICODE_FORMAT = "UTF-8";
      public static final String DESEDE_ENCRYPTION_SCHEME = "DESede";
      private KeySpec myKeySpec;
      private SecretKeyFactory mySecretKeyFactory;
      private Cipher cipher;
      byte[] keyAsBytes;
      private String myEncryptionKey;
      private String myEncryptionScheme;
      SecretKey key;
      static String stringToEncrypt="";
  
      public void setKey(String myKey) throws Exception
      {
          myEncryptionKey = myKey ;
          myEncryptionScheme = DESEDE_ENCRYPTION_SCHEME;
          keyAsBytes = myEncryptionKey.getBytes(UNICODE_FORMAT);
          myKeySpec = new DESedeKeySpec(keyAsBytes);
          mySecretKeyFactory = SecretKeyFactory.getInstance(myEncryptionScheme);
          cipher = Cipher.getInstance("DESede/ECB/NoPadding");
          key = mySecretKeyFactory.generateSecret(myKeySpec);
      }
  
      /**
       * Method To Encrypt The String
       */
      public String encrypt(byte[] plainText) {
          String encryptedString = null;
          try {
              cipher.init(Cipher.ENCRYPT_MODE, key);
              //byte[] plainText = unencryptedString.getBytes(UNICODE_FORMAT);
              //byte[] encryptedText = cipher.doFinal(plainText);
              BASE64Encoder base64encoder = new BASE64Encoder();
              encryptedString = base64encoder.encode(plainText);
          } catch (Exception e) {
              e.printStackTrace();
          }
          return encryptedString;
      }
      /**
       * Method To Decrypt An Ecrypted String
       */
      public String decrypt(String encryptedString) {
          String decryptedText=null;
          try {
              cipher.init(Cipher.DECRYPT_MODE, key);
              BASE64Decoder base64decoder = new BASE64Decoder();
              System.out.println(myEncryptionKey);
              byte[] encryptedText = base64decoder.decodeBuffer(encryptedString);
              byte[] plainText = cipher.doFinal(encryptedText);
              decryptedText= bytes2String(plainText);
          } catch (Exception e) {
              e.printStackTrace();
          }
          return decryptedText;
      }
      /**
       * Returns String From An Array Of Bytes
       */
      private static String bytes2String(byte[] bytes) {
          StringBuffer stringBuffer = new StringBuffer();
          for (int i = 0; i &lt; bytes.length; i++) {
              stringBuffer.append((char) bytes[i]);
          }
          return stringBuffer.toString();
      }
  
      /**
       * Testing The DESede Encryption And Decryption Technique
      */
      public static void main(String args []) throws Exception
      {
          TripleDesEncryptionDecryption myEncryptor= new TripleDesEncryptionDecryption();
  
  
          myEncryptor.setKey("tarunvermacdac@gmail.com") ;
  
          System.out.println("tarun1234".getBytes());
          String encrypted=myEncryptor.encrypt("tarun".getBytes());
          String decrypted=myEncryptor.decrypt(encrypted);
  
          System.out.println("String To Encrypt: "+stringToEncrypt);
          System.out.println("Encrypted Value :" + encrypted);
          System.out.println("Decrypted Value :"+decrypted);
      }
  }
  </code></pre>