2010-10-17 18 views
5

पर एक फ़ाइल एन्क्रिप्ट करें मैं अपने आईफोन एप्लिकेशन के लिए फ़ाइल एन्क्रिप्शन कार्यक्षमता चाहता हूं। डेस्कटॉप आधारित अनुप्रयोगों के लिए मैं अपेक्षाकृत छोटे फ़ाइलें एन्क्रिप्ट करने के लिए नीचे दिए गए समारोह का प्रयोग किया:आईफोन-एसडीके

- (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 एमबी लेगा, क्योंकि इसे एनएसडीटा में लोड किया जाएगा और इस तरह से वापस किया जाएगा। क्या कोई ऐसी विधि है जो छोटे ब्लॉक को पढ़ने और दूसरी फ़ाइल में आउटपुट लिखकर फ़ाइल को एसीसीक्रिप्ट कर देगी? या मैं इस लेने के बारे में गलत तो मीटर

+0

हाय, मैं आईफोन के बजाय कोको एप्लिकेशन में एन्क्रिप्शन के साथ भी काम कर रहा हूं। आपने उपरोक्त कोड को उस फ़ाइल के साथ कैसे कार्यान्वित किया जिसे आपने एन्क्रिप्ट करने के लिए उपयोग किया था? क्या आपने एनडीएएलआईएएस का इस्तेमाल किया था? मैं यह नहीं समझ सकता कि फ़ाइल की सामग्री को कैसे पकड़ें और फिर इसे एन्क्रिप्ट करें। –

+1

मैंने छोड़ दिया ताकि मैं सिर्फ एक निश्चित आकार बफर में फ़ाइल पढ़ रहा हूं, बफर को एन्क्रिप्ट कर रहा हूं और एन्क्रिप्टेड फ़ाइल में लिख रहा हूं। मैं इसे लूप में कर रहा हूं क्योंकि बफर फ़ाइल से ही छोटा है (मेमोरी होग से बचने के लिए) यह काम करता है, लेकिन मुझे यकीन नहीं है कि यह एन्क्रिप्शन शक्ति को प्रभावित नहीं करता है। – Marius

+0

हाय, मारियस
क्या आप इसे काम कर रहे हैं? मैं निश्चित आकार बफर में फ़ाइल को पढ़ने के बाद भी उस बफर को एन्क्रिप्ट कर रहा हूं। लेकिन जब मैं एन्क्रिप्टेड फ़ाइल परिणाम दूषित फ़ाइल में डिक्रिप्ट करने का प्रयास करता हूं। क्या तुम मेरी मदद कर सकते हो? – Iducool

उत्तर