Всмотритесь на аргументы CCCrypt:
CCCryptorStatus CCCrypt(CCOperation op,
CCAlgorithm alg,
CCOptions options,
const void *key,
size_t keyLength,
const void *iv,
const void *dataIn,
size_t dataInLength,
void *dataOut,
size_t dataOutAvailable,
size_t *dataOutMoved);
(Это из старого man page, которая использует типы C.)
С в последних трех аргументах вы должны указать:
- байтовый буфер, в котором функция записывает зашифрованные данные
- общая (доступная) длина буфера
- и место, где функция может записывать количество записанных байтов.
В Objective-C, вы можете использовать NSMutableData для обеспечения необходимого буфера (код примера взят из here):
CCCryptorStatus ccStatus = kCCSuccess;
size_t cryptBytes = 0;
NSMutableData *dataOut = [NSMutableData dataWithLength:dataIn.length + kCCBlockSizeAES128];
ccStatus = CCCrypt(encryptOrDecrypt, // kCCEncrypt or kCCDecrypt
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
key.bytes,
kCCKeySizeAES128,
iv.bytes,
dataIn.bytes,
dataIn.length,
dataOut.mutableBytes,
dataOut.length,
&cryptBytes);
dataOut.length = cryptBytes;
да я получил это спасибо, но теперь у меня есть проблемы с прохождением зашифрованные данные в php web api, так как в php невозможно дешифровать данные с помощью NSDATA, так как я могу преобразовать этот зашифрованный NSDATA в байты или строку. – puja
Если ваш PHP API поддерживает его, вы можете напрямую установить зашифрованные необработанные данные в качестве тела запроса HTTP. Если это не так, вам придется обсудить с владельцем, что они ожидают. Вы можете, например, кодировать данные в строку base64 с помощью соответствующих методов NSData, а затем преобразовать обратно в кодированные данные UTF-8 и использовать их. – vzsg