2011-04-06 85 views
5

當我加密一個文件(DOC,PDF等),我使用:如何使用CCCrypt()加密文件?

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

解密的時候,我用:

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

但是,當解密,則返回錯誤:kCCDecodeError = - 4304。

如果我在解密時刪除了kCCOptionPKCS7Padding的參數,則沒有錯誤。但該文件無法打開。

那麼,你能告訴我如何通過這些參數?

非常感謝!

回答

4

這對於加密

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

這是解密

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

謝謝,但它並沒有work.And我下面把它改寫: – iphoner 2011-04-07 09:49:59

+0

但它的工作對我來說... – 2011-04-08 06:32:24

+2

你不檢查CCCryptorStatus當你進行加密。你確定它有效嗎?另外,如何創建「緩衝區」。它是基於bufferSize嗎? – ax123man 2011-04-12 19:13:53

1

更改線路

bzero(dataOut, sizeof(dataOut2)); 

bzero(dataOut2, sizeof(dataOut2)); 

Thanks Inder

0

好的,我明白了!也測試了它成功。該行應該是:

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