2011-04-06 14 views
5

cuando cifrar un archivo (doc, pdf, etc.), que utilizo:Cómo usar CCCrypt() para cifrar un archivo?

size_t bufferSize = dataLength + kCCBlockSizeAES128;  
CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
           keyPtr, kCCKeySizeAES256, 
           NULL /* initialization vector (optional) */, 
           dataBytes, dataLength, /* input */ 
           buffer, bufferSize,/* output */ 
           &numBytesEncrypted); 

cuando descifrar, utilizo:

size_t bufferSize = dataLength + kCCBlockSizeAES128; 
CCCryptorStatus result = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
           keyPtr, kCCKeySizeAES256, 
           NULL /* initialization vector (optional) */, 
           dataBytes, dataLength,/* input */ 
           buffer, bufferSize,/* output */ 
           &numBytesEncrypted); 

Pero cuando descifrado, se devuelve el error: kCCDecodeError = - 4304.

Si elimino el parámetro de kCCOptionPKCS7Padding al descifrar, no hay ningún error. Pero el archivo tampoco puede abrirse.

Entonces, ¿podría decirme cómo pasar estos parámetros?

gracias mucho!

Respuesta

4

Esta para el cifrado

NSString *key [email protected]"YourKey"; 
    char keyPtr[kCCKeySizeAES256+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]; 

    char *dataIn = "This is your data"; 
    char dataOut[500];// set it acc ur data 
    bzero(dataOut, sizeof(dataOut)); 
    size_t numBytesEncrypted = 0; 

    CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding, keyPtr,kCCKeySizeAES256, NULL, dataIn, strlen(dataIn), dataOut, sizeof(dataOut), &numBytesEncrypted); 

esto es para el descifrado

char dataOut2[500]; 
bzero(dataOut, sizeof(dataOut2)); 
size_t numBytesDecrypted = 0; 

CCCryptorStatus result = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding, keyPtr,kCCKeySizeAES256, NULL, dataOut, numBytesEncrypted, dataOut2, sizeof(dataOut2), &numBytesDecrypted); 
+1

Gracias, pero no me work.and reescribir de la siguiente manera: – iphoner

+0

pero funcionó para mí ... –

+2

no marca CCCryptorStatus al cifrar. ¿Estás seguro de que funciona? Además, cómo crear "buffer". ¿Está basado en bufferSize? – ax123man

1

Cambie la línea

bzero(dataOut, sizeof(dataOut2)); 

a

bzero(dataOut2, sizeof(dataOut2)); 

Gracias Inder

0

OK, ya lo tengo! También lo he probado con éxito. La línea debe ser:

CCCrypt(kCCDecrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding, keyPtr,kCCKeySizeAES256, NULL, dataOut, numBytesEncrypted, dataOut2, sizeof(dataOut2), &numBytesDecrypted); 
Cuestiones relacionadas