2011-04-06 18 views
5

quando ho crittografare un file (doc, pdf, ecc), io uso:Come utilizzare CCCrypt() per crittografare un file?

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

quando decrypt, io uso:

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

Ma quando decrypt, restituisce l'errore: kCCDecodeError = - 4304.

Se rimuovo il parametro di kCCOptionPKCS7Padding durante la decrittografia, non ci sono errori. Ma il file non può aprire neanche.

Quindi, potresti dirmi come passare questi parametri?

grazie mille!

risposta

4

Questo per la crittografia

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); 

questo è per la decrittazione

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

Grazie, ma non ho work.And riscrivere come qui sotto: – iphoner

+0

ma ha funzionato per me ... –

+2

non si controlla CCCryptorStatus quando si esegue la crittografia. Sei sicuro che funzioni? Inoltre, come creare "buffer". È basato su bufferSize? – ax123man

1

Modificare la linea

bzero(dataOut, sizeof(dataOut2)); 

a

bzero(dataOut2, sizeof(dataOut2)); 

Grazie Inder

0

OK, ho capito! Lo hanno anche testato con successo. La linea dovrebbe essere:

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