2012-05-08 5 views
1

を使用するコードです:iOSのCCCrypt kCCDecryptここkCCAlgorithmAES128

- (NSData *) doCipher: (NSData *) plainData key: (NSData *) symmetricKey context: (CCOperation) encryptOrDecrypt padding: (CCOptions *) pkcs7 
{ 
// Initialization vector; dummy in this case 0's. 
uint8_t iv[kChosenCipherBlockSize]; 
bzero((void *) iv, (size_t) sizeof(iv)); 

// We don't want to toss padding on if we don't need to 
if (encryptOrDecrypt == kCCEncrypt) 
{ 
    if (*pkcs7 != kCCOptionECBMode) 
    { 
     if ((plainData.length % kChosenCipherBlockSize) == 0) 
      *pkcs7 = 0x0000; 
     else 
      *pkcs7 = kCCOptionPKCS7Padding; 
    } 
} 
else if (encryptOrDecrypt == kCCDecrypt) 
{ 
    *pkcs7 = 0x0000; 
} 
else 
{ 
    DLog(@"Invalid CCOperation parameter [%d] for cipher context.", *pkcs7); 
    return nil; 
} 

// Actually perform the encryption or decryption. 
NSMutableData *dataOut = [NSMutableData dataWithLength: plainData.length + kChosenCipherBlockSize]; 
size_t movedBytes  = 0; 

CCCryptorStatus ccStatus = CCCrypt(encryptOrDecrypt, 
     kCCAlgorithmAES128, 
     *pkcs7, 
     symmetricKey.bytes, 
     kChosenCipherKeySize, 
     iv, 
     [plainData bytes], 
     [plainData length], 
     [dataOut mutableBytes], 
     [dataOut length], 
     &movedBytes 
); 

if (ccStatus == noErr) 
{ 
    dataOut.length = movedBytes; 
} 
else 
{ 
    DLog(@"Problem with encipherment ccStatus == %d", ccStatus); 
    return nil; 
} 

return dataOut; 
} 

私はkCCDecryptにkCCOptionPKCS7Paddingを使用して、時々私は、エラーコード4304 を取得し、私はkCCDecryptがここAnyone else having trouble with iOS 5 encryption? 説明したように、私が「ドン際のパディングを使用しないようにしようエラーを取得しないでください。しかし、kCCDecryptの後のデータ長は、kCCEncryptの前の元のデータ長と同じでないことがあります。これは元のデータ長に符号化ブロックサイズが乗算されていないためです。

他にもこの問題がありますか?

答えて

関連する問題