iPhone cbc cifrado devolviendo nulo
-
13-12-2019 - |
Pregunta
Tengo el siguiente código dentro de la clase NSDATA + AES256.Estoy intentando el cifrado AES CBC a una NSString con el siguiente código.Tengo una llave y una IV.Pero en resumen NULL.No puedo averiguar qué está mal.Esto es lo que probé -
NSString *initV= @"somekey*********";
NSData *input= [initV dataUsingEncoding:NSUTF8StringEncoding];
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCModeCBC,
keyPtr, kCCKeySizeAES256,
[input bytes] /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesEncrypted);
Solución
Este es el código que me funcionó finalmente -
-(NSData *)AES256EncryptWithKey:(NSString *)key {
NSUInteger dataLength = [self length];
NSData *keyGiven= [key dataUsingEncoding:NSUTF8StringEncoding];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
NSString *initV= @"***************";
NSData *input= [initV dataUsingEncoding:NSUTF8StringEncoding];
size_t numBytesEncrypted = 0;
CCCryptorRef ccRef;
CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES128, 0, (const void *)[keyGiven bytes], kCCKeySizeAES256, (const void *)[input bytes], &ccRef);
CCCryptorStatus cryptStatus = CCCryptorUpdate(ccRef, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted);
CCCryptorRelease(ccRef);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer); //free the buffer;
return nil;
}
Estoy convirtiendo una NSSTRING a NSDATA y pasándola para el cifrado.El NSString debe ser de 16 caracteres.Si es de menos de 16 caracteres, lo hago 16 al agregar espacios.
No sé si esto va a ayudar a cualquiera.Pero solo pensé que debería compartir.Gracias.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow