title: AES gets different results in iOS (Obj-C) and Android (Java)
body: <p>I'm a complete newbie to this kind of encryption things but I have a Java app and an iOS, and I want them to both be able to ecrypt a text to a same result. I use AES.
  I found these codes, with a little modification of course, but they return different result</p>
  
  <p>iOS Code:</p>
  
  <pre><code>- (NSData *)AESEncryptionWithKey:(NSString *)key {    
      unsigned char keyPtr[kCCKeySizeAES128] = { 'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };
      size_t bufferSize = 16;
      void *buffer = malloc(bufferSize);
      size_t numBytesEncrypted = 0;
      const char iv2[16] = {  65, 1, 2, 23, 4, 5, 6, 7, 32, 21, 10, 11, 12, 13, 84, 45 };
      CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                            kCCAlgorithmAES128,
                                            kCCOptionECBMode | kCCOptionPKCS7Padding,,
                                            keyPtr,
                                            kCCKeySizeAES128,
                                            iv2,
                                            @"kayvan",
                                            6,
                                            dataInLength,
                                            buffer,
                                            bufferSize,
                                            &amp;numBytesEncrypted);
  
  
      if (cryptStatus == kCCSuccess) {
          return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
      }
  
      free(buffer);
      return nil;
  }
  </code></pre>
  
  <p>and the Java code is:</p>
  
  <pre><code>public static void main(String[] args) throws Exception {
      String password = "kayvan";
      String key = "TheBestSecretKey";
      String newPasswordEnc = AESencrp.newEncrypt(password, key);
      System.out.println("Encrypted Text : " + newPasswordEnc);
  }
  </code></pre>
  
  <p>and in another java class (<code>AESencrp.class</code>) I have: </p>
  
  <pre><code>public static final byte[] IV = { 65, 1, 2, 23, 4, 5, 6, 7, 32, 21, 10, 11, 12, 13, 84, 45 };
  public static String newEncrypt(String text, String key) throws Exception {
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      byte[] keyBytes= new byte[16];
      byte[] b= key.getBytes("UTF-8");
      int len = 16; 
      System.arraycopy(b, 0, keyBytes, 0, len);
      SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
      IvParameterSpec ivSpec = new IvParameterSpec(IV);
      System.out.println(ivSpec);
      cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivSpec);
      byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
      String result = DatatypeConverter.printBase64Binary(results);
      return result;
  }
  </code></pre>
  
  <p>The string I wanted to encrypt is <code>kayvan</code> with the key <code>TheBestSecretKey</code>. and the results after Base64 encoding are:</p>
  
  <p>for iOS: <code>9wXUiV+ChoLHmF6KraVtDQ==</code></p>
  
  <p>for Java: <code>/s5YyKb3tDlUXt7pqA5OFA==</code></p>
  
  <p>What should I do now?</p>