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の前の元のデータ長と同じでないことがあります。これは元のデータ長に符号化ブロックサイズが乗算されていないためです。
他にもこの問題がありますか?