Если я удалю kCCOptionPKCS7Padding, следующая функция вернет мне правильный размер буфера с пустыми данными шифрования ‹>. Я не могу использовать параметр kCCDecrypt для расшифровки пустого зашифрованного текста обратно в обычный текст.
char keyPtr[kCCKeySizeAES128 + 1];
memset(keyPtr, 0, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128 + 1];
memset(ivPtr, 0, sizeof(ivPtr));
[iv getCString:ivPtr
maxLength:sizeof(ivPtr)
encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesCrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionECBMode|kCCOptionPKCS7Padding,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[self bytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
return [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
Если kCCOptionPKCS7Padding отсутствует, механизм шифрования не работает. Таким образом, это выглядит обязательным, а не опциональным.
Мой вопрос:
Кто заставит CCCrypt() работать без PKCS7 Padding?