Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 错误的实现?_Ios_Cocoa Touch_Aes - Fatal编程技术网

Ios 错误的实现?

Ios 错误的实现?,ios,cocoa-touch,aes,Ios,Cocoa Touch,Aes,我的AES方法(下面的代码)仅适用于自加密数据。 我不知道哪里出了问题。你能给我推荐一些框架或更好的实现方案吗 - (NSData *)aesOperation:(CCOperation)op OnData:(NSData *)data key:(NSString*)inKey { NSData *outData = nil; int bufferSize = 6000000; NSLog(@"AES InData: %@",data); if (inKey ==

我的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;
}

我找到了使用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];
}

伟大的解决方案!我的钥匙长度有问题,可以解决。如果您正在寻找en并解码
iOS
Android
,请看这篇文章,也许它对您有帮助