title: Decrypt NSString with AES128 encryption
body: <p>I hope a smart guy will help me :)</p>
  
  <p>I receive a encrypted text from a C# server and i'm unable to decrypt it correctly:
  I always have an empty string. Normally the decrypted key should be </p>
  
  <blockquote>
    <p>1111111111111111</p>
  </blockquote>
  
  <p>(16time)</p>
  
  <p>I use the AES128 algorithm for the decryption and the settings given by the back end (the guys who encrypted this text) are as follow :</p>
  
  <ul>
  <li>Padding:  PKCS7Padding</li>
  <li>KeySize:  128</li>
  <li>InitVector: null</li>
  <li>Mode: CBC</li>
  <li>text to decrypt  (base64 encoded) : 1vycDn3ktoyaUkPlRAIlsA==</li>
  <li>the key: 3a139b187647a66d</li>
  </ul>
  
  <p>Here is the code i use for the decryption</p>
  
  <pre><code>- (NSData *)AES256DecryptWithKey:(NSString *)key {
  // 'key' should be 32 bytes for AES256, will be null-padded otherwise
  char keyPtr[kCCKeySizeAES2128+1]; // room for terminator (unused)
  bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
  
  // fetch key data
  [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
  
  NSUInteger dataLength = [self length];
  
  //See the doc: For block ciphers, the output size will always be less than or 
  //equal to the input size plus the size of one block.
  //That's why we need to add the size of one block here
  size_t bufferSize = dataLength + kCCBlockSizeAES128;
  void *buffer = malloc(bufferSize);
  
  size_t numBytesDecrypted = 0;
  CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                   keyPtr, kCCKeySizeAES128,
                                   NULL /* initialization vector (optional) */,
                                   [self bytes], dataLength, /* input */
                                   buffer, bufferSize, /* output */
                                   &amp;numBytesDecrypted);
  
  if (cryptStatus == kCCSuccess) {
      //the returned NSData takes ownership of the buffer and will free it on deallocation
      return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
  }
  
  free(buffer); //free the buffer;
  return nil;
  </code></pre>
  
  <p>}</p>
  
  <p>Thanx alot in advance for your help. I'm on this probleme since a long time with no answer in front of me...</p>