2012-05-17 10 views
7

मैं कुंजी के साथ NSString मूल्य एन्क्रिप्ट करने के लिए,आईफोन में डीईएस का उपयोग करके एनएसएसटींग मूल्य को एन्क्रिप्ट कैसे करें?

NSString *token = @"encryptValue"; 
NSString *key = @"encryptKey"; 

NSData * keyData = [key dataUsingEncoding: NSUTF8StringEncoding]; 
NSData * plainData = [token dataUsingEncoding: NSUTF8StringEncoding]; 
NSMutableData * encData = [NSMutableData dataWithLength: plainData.length + 256]; 
size_t bytesWritten = 0; 
CCCryptorStatus ccStatus = CCCrypt (kCCEncrypt, 
        kCCAlgorithmDES, 
        kCCOptionPKCS7Padding, 
        [keyData bytes], 
        kCCKeySizeDES, 
        NULL, 
        [plainData bytes], 
        [plainData length], 
        encData.mutableBytes, 
        encData.length, 
        &bytesWritten); 
encData.length = bytesWritten;  
NSString *encrypted = [[NSString alloc] initWithBytes:[encData bytes] length:[encData length] encoding: NSUTF8StringEncoding]; 
NSLog(@"ENCRYPT : %@",encrypted); 

लेकिन मैं हो रही है (शून्य) परिणाम है निम्नलिखित कोड का इस्तेमाल किया। कुछ गलत है क्या? NSString मान को एन्क्रिप्ट कैसे करें?

उत्तर

4

अंत में मैं कोड अपनी कार्यशील ठीक बाद और अब के साथ किया।

- (NSString*) doCipher:(NSString*)encryptValue { 

    const void *vplainText; 
    size_t plainTextBufferSize = [encryptValue length]; 
    vplainText = (const void *) [encryptValue UTF8String];  
    CCCryptorStatus ccStatus; 
    uint8_t *bufferPtr = NULL; 
    size_t bufferPtrSize = 0; 
    size_t movedBytes = 0; 

    bufferPtrSize = (plainTextBufferSize + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1); 
    bufferPtr = malloc(bufferPtrSize * sizeof(uint8_t)); 
    memset((void *)bufferPtr, 0x0, bufferPtrSize); 

    Byte iv [] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}; 

    NSString *key = @"encryptKey"; 
    const void *vkey = (const void *) [key UTF8String]; 

    ccStatus = CCCrypt(kCCEncrypt, 
         kCCAlgorithmDES, 
         kCCOptionPKCS7Padding, 
         vkey, 
         kCCKeySizeDES, 
         iv, 
         vplainText, 
         plainTextBufferSize, 
         (void *)bufferPtr, 
         bufferPtrSize, 
         &movedBytes); 

    NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes]; 
    NSString *result = [myData base64Encoding]; 

    return result; 
} 
+3

और आप कैसे डिक्रिप्ट करते हैं? – Hlung

10

यहाँ, एईएस के लिए एक तरीका है शायद डेस समान होगा के लिए, एक नज़र यह मेरे साथ काम करता है ले ... NSData
पर एक नई श्रेणी AES बनाने के लिए NSData + AES.h

#import <Foundation/Foundation.h> 
#import <CommonCrypto/CommonCryptor.h> 

@interface NSData (AES) 

- (NSData*) EncryptAES: (NSString *) key; 
- (NSData *) DecryptAES: (NSString *) key; 

@end 
AES.m

लिए NSData +

#import "NSData+AES.h" 
    @implementation NSData(AES) 

    - (NSData*) EncryptAES: (NSString *) key 
    { 
     char keyPtr[kCCKeySizeAES256+1]; 
     bzero(keyPtr, sizeof(keyPtr)); 

     [key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16StringEncoding]; 
     size_t numBytesEncrypted = 0; 

     NSUInteger dataLength = [self length]; 

     size_t bufferSize = dataLength + kCCBlockSizeAES128; 
     void *buffer = malloc(bufferSize); 

     CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
             keyPtr, kCCKeySizeAES256, 
             NULL, 
             [self bytes], [self length], 
             buffer, bufferSize, 
             &numBytesEncrypted); 

     if(result == kCCSuccess) 
      return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 

     return nil; 
    } 

    - (NSData *) DecryptAES: (NSString *) key 
    { 
     char keyPtr[kCCKeySizeAES256+1]; 
     bzero(keyPtr, sizeof(keyPtr)); 

     [key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16StringEncoding]; 

     size_t numBytesEncrypted = 0; 

     NSUInteger dataLength = [self length]; 

     size_t bufferSize = dataLength + kCCBlockSizeAES128; 
     void *buffer_decrypt = malloc(bufferSize);  

     CCCryptorStatus result = CCCrypt(kCCDecrypt , kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
             keyPtr, kCCKeySizeAES256, 
             NULL, 
             [self bytes], [self length], 
             buffer_decrypt, bufferSize, 
             &numBytesEncrypted); 

     if(result == kCCSuccess) 
     return [NSData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted]; 

     return nil; 
    } 

    @end 

उपयोग: आयात NSData + AES.h

//Encryption 
NSString *myString = @"This is the content"; 
NSString *key = @"my secret key"; 
NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *encryptedData = [data EncryptAES:key]; 

//Decryption 
NSString *decryptedString = [[[NSString alloc] initWithData:[encryptedData DecryptAES:key] encoding:NSUTF8StringEncoding] autorelease]; // remove autorelease if using ARC 
+0

आपके उत्तर के लिए धन्यवाद। जहां मैं गुप्त कुंजी का उपयोग करता हूं? – bharath

+0

मैं आपको एक मिनट में उपयोग दिखाने के लिए अपना उत्तर अपडेट करूंगा – graver

+0

तैयार – graver

संबंधित मुद्दे

 संबंधित मुद्दे