зашифровать файл на iphone-sdk - PullRequest
5 голосов
/ 17 октября 2010

Я хотел бы иметь функцию шифрования файлов для моего приложения iphone.Для настольных приложений я использовал нижеприведенную функцию для шифрования относительно небольших файлов:

- (NSData *)aesEncrypt:(NSString *)key {
 // 'key' should be 32 bytes for AES256, will be null-padded otherwise
 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];

 NSUInteger dataLength = [self length];

 //See the doc: For block ciphers, the output size will always be less than or 
 //equal to the input size plus the size of one block.
 //That's why we need to add the size of one block here
 size_t bufferSize = dataLength + kCCBlockSizeAES128;
 void *buffer = malloc(bufferSize);

 size_t numBytesEncrypted = 0;



 CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
            keyPtr, kCCKeySizeAES256,
            NULL /* initialization vector (optional) */,
            [self bytes], dataLength, /* input */
            buffer, bufferSize, /* output */
            &numBytesEncrypted);
 if (cryptStatus == kCCSuccess) {
  //the returned NSData takes ownership of the buffer and will free it on deallocation
  return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
 }

 free(buffer); //free the buffer;
 return nil;
}

Но я не думаю, что этот код можно использовать на iphone.Если я попытаюсь зашифровать файл 5 МБ, он займет не менее 10 МБ в оперативной памяти, так как он будет загружен в NSData и возвращен как таковой.Есть ли метод, который будет экранировать файл, читая небольшие блоки и записывая вывод в другой файл?Или я ошибаюсь из-за этого, взяв м

1 Ответ

1 голос
/ 17 декабря 2013

Попробуйте RNCryptor https://github.com/rnapier/RNCryptor

Я успешно использовал это в своем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...