2012-11-21 69 views
0

我的AES方法(下面的代码)只适用于它自己的密码数据。 我不知道它出错的地方。你能建议我做一些框架还是更好的实施?iOS AES错误实施?

- (NSData *)aesOperation:(CCOperation)op OnData:(NSData *)data key:(NSString*)inKey { 
    NSData *outData = nil; 
    int bufferSize = 6000000; 
    NSLog(@"AES InData: %@",data); 
    if (inKey == NULL) { 
     NSLog(@"A klucz to chcesz wyczarować? Podaj klucz do zaszyfrowanego pliku"); 
     return NULL; 
    } 

    const void *key = inKey ; 
    const void *dataIn = data.bytes; 
    size_t dataInLength = data.length; 
    // Data out parameters 
    size_t outMoved = 0; 

    unsigned char outBuffer[bufferSize]; 
    memset(outBuffer, 0, bufferSize); 
    CCCryptorStatus status = -1; 

    status = CCCrypt(op, kCCAlgorithmAES128, kCCOptionECBMode, key, kCCKeySizeAES128, NULL, 
        dataIn, dataInLength, &outBuffer, bufferSize, &outMoved); 

    if(status == kCCSuccess) { 
     outData = [NSData dataWithBytes:outBuffer length:outMoved]; 
    } else if(status == kCCBufferTooSmall) { 

     size_t newsSize = outMoved; 
     void *dynOutBuffer = malloc(newsSize); 
     memset(dynOutBuffer, 0, newsSize); 
     outMoved = 0; 

     status = CCCrypt(op,kCCAlgorithmAES128,kCCOptionECBMode,key,kCCKeySizeAES128,NULL,dataIn, dataInLength, &outBuffer, bufferSize, &outMoved); 

     if(status == kCCSuccess) { 
      outData = [NSData dataWithBytes:outBuffer length:outMoved]; 
     } 
    } 
    return outData; 
} 

回答

2

我找到了正确的方法来使用AES加密/解码,它适用于每个人。

- (NSData *)initCipherData:(NSData *)data key:(NSString*)key{ 
    return [self aesOperation:kCCEncrypt OnData:data key:key]; 
} 

- (NSData *)initDecipherData:(NSData *)data key:(NSString*)key{ 
    return [self aesOperation:kCCDecrypt OnData:data key:key]; 
} 

- (NSData *)aesOperation:(CCOperation)op 
        OnData:(NSData *)data 
        key:(NSString*)inKey { 

    const char * key = [inKey UTF8String]; 
    NSUInteger dataLength = [data length]; 
    uint8_t unencryptedData[dataLength + kCCKeySizeAES128]; 
    size_t unencryptedLength; 

    CCCrypt(op, 
      kCCAlgorithmAES128, 
      kCCOptionECBMode, 
      key, 
      kCCKeySizeAES128, 
      NULL, 
      [data bytes], 
      dataLength, 
      unencryptedData, 
      dataLength, 
      &unencryptedLength); 
    return [NSData dataWithBytes:unencryptedData length:unencryptedLength]; 
} 
+0

伟大的解决方案!我的密钥长度有问题,可以修复它。如果你在寻找和解码'iOS'和'Android'看看这篇文章,可能对你有帮助http://stackoverflow.com/a/19219611/1141395 –