title: IllegalBlockSizeException when trying to encrypt and decrypt a string with AES
body: <p>I have a hardcoded key with which I want to encrypt a string before storing it in <code>SharedPreferences</code>. This is the code I have so far:</p>
  
  <pre><code>public class TokenEncryptor {
  
      private final static String TOKEN_KEY = "91a29fa7w46d8x41";
  
      public static String encrypt(String plain) {
          try {
              Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
              AlgorithmParameterSpec ivSpec = new IvParameterSpec(new byte[16]);
              SecretKeySpec newKey = new SecretKeySpec(TOKEN_KEY.getBytes(), "AES");
              cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);
              return new String(cipher.doFinal(plain.getBytes()));
          } catch (Exception e) {
              Ln.e(e);
              return null;
          }
      }
  
      public static String decrypt(String encoded) {
          try {
              Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
              AlgorithmParameterSpec ivSpec = new IvParameterSpec(new byte[16]);
              SecretKeySpec newKey = new SecretKeySpec(TOKEN_KEY.getBytes(), "AES");
              cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec);
              return new String(cipher.doFinal(encoded.getBytes()));
          } catch (Exception e) {
              Ln.e(e);
              return null;
          }
      }
  }
  </code></pre>
  
  <p>It seems to be catching an exception at the end of <code>decrypt</code> method:</p>
  
  <p><code>javax.crypto.IllegalBlockSizeException: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length</code></p>
  
  <p>Can someone point me in the right direction? I have a feeling I'm doing something wrong instantiating <code>IvParameterSpec</code>.</p>