Desencryption de files de video en iOS

Tengo una aplicación que obtiene video encriptado en modo comprimido desde un server Java. En el lado iOS, no puedo descifrar eso.

El código que utilizo para el encryption en Java es:

// generate a key KeyGenerator keygen = KeyGenerator.getInstance("AES"); keygen.init(128); // To use 256 bit keys, you need the "unlimited strength" encryption policy files from Sun. //byte[] key = keygen.generateKey().getEncoded(); byte key[] = {0x00, 0x01, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); SecureRandom random = new SecureRandom(); IvParameterSpec ivspec = new IvParameterSpec(key); // initialize the cipher for encrypt mode Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec); System.out.println(); byte[] encrypted = cipher.doFinal(IOUtils.toByteArray(new FileInputStream(new File(fileName)))); 

Mi código para descifrar en iOS es el siguiente:

  char keyPtr[kCCKeySizeAES256+1]; bzero( keyPtr, sizeof(keyPtr) ); [key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16StringEncoding]; Byte iv [] = {0x00, 0x01, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //unsigned char keyPtr[kCCKeySizeAES128] = { 0x00, 0x01, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; NSData *passwordData = [@"[B@71e2b67c" dataUsingEncoding:NSUTF8StringEncoding]; size_t numBytesEncrypted = 0; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer_decrypt = malloc(bufferSize); CCCryptorStatus result = CCCrypt( kCCDecrypt , kCCAlgorithmAES128, kCCOptionPKCS7Padding, passwordData.bytes, kCCKeySizeAES256, iv, [self bytes], [self length], buffer_decrypt, bufferSize, &numBytesEncrypted ); NSLog(@".......decryption...........%d........",result); if( result == kCCSuccess ) return [NSData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted]; 

¿Cuál podría ser el problema aquí y cómo puedo solucionarlo?

La contraseña no es la longitud correcta para kCCAlgorithmAES128 , es 88 bits:

 NSData *passwordData = [@"[B@71e2b67c" dataUsingEncoding:NSUTF8StringEncoding]; 

Hay una inconsistencia:

kCCAlgorithmAES128 y kCCKeySizeAES256

La key de desencryption no es la misma que la key de encryption.
El desencryption iv no es el mismo que el encryption iv.

Solo para empezar, necesitas corregirlos.

Como escribe @Duncan, comience con un caso muy simple y cuando eso esté funcionando, agregue complejidad. Un punto de partida simple es exactamente un bloque de datos, sin relleno, una key simple del tamaño correcto, una iv de todos los 0s.

Lo mejor: contratar a un experto en el dominio, la security es muy difícil de corregir.