Chciałbym mieć funkcję szyfrowania plików dla mojej aplikacji iPhone. W przypadku aplikacji opartych na komputerach użyłem poniższej funkcji do zaszyfrowania stosunkowo małych plików:zaszyfrować plik na iphone-sdk
- (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;
}
Ale nie sądzę, że ten kod może być użyty na iPhonie. Jeśli spróbuję zaszyfrować plik 5 MB zajmie co najmniej 10 MB pamięci RAM, ponieważ zostanie załadowany do NSData i zwrócony jako taki. Czy istnieje metoda, która eccrypt pliku poprzez czytanie małych bloków i zapisywanie danych wyjściowych do innego pliku? Albo się mylę o tym trwa tak m
Witam, pracuję również z szyfrowaniem w aplikacji kakao zamiast iPhone'a. W jaki sposób zaimplementowałeś powyższy kod z plikiem, którego użyłeś do zaszyfrowania? Czy używasz NDAlias? Nie mogę wymyślić, jak pobrać zawartość pliku, a następnie zaszyfrować. –
Poddałem się, więc właśnie czytam plik do bufora o stałym rozmiarze, szyfruję bufor i piszę do zaszyfrowanego pliku. Robię to w pętli, ponieważ bufor jest znacznie mniejszy niż sam plik (w celu uniknięcia wiep pamięci) To działa, ale nie jestem pewien, czy to nie wpływa na siłę szyfrowania. – Marius
Witam, Marius
czy to działa? Robię to samo, czytając plik w buforze o ustalonym rozmiarze, a następnie szyfrując ten bufor. Ale kiedy próbuję odszyfrować ten zaszyfrowany plik, wynikiem jest uszkodzony plik. Czy możesz mi pomóc? – Iducool