Objective c CCCrypt不';在Xcode 4和Xcode 5上工作(得到不同的结果)

Objective c CCCrypt不';在Xcode 4和Xcode 5上工作(得到不同的结果),objective-c,xcode4,xcode5,Objective C,Xcode4,Xcode5,我尝试使用CCCrypt方法,但从Xcode 3.2.6、Xcode 4和Xcode 5得到的结果不同;两者都有MacOSX10.6。 我使用了以下代码来解密数据 - (NSData*)decryptData:(NSData*)data key:(NSData*)key iv:(NSData*)iv { NSData* result = nil; // setup key unsigned char cKey[kCCKeySizeAES256]; bzero(c

我尝试使用CCCrypt方法,但从Xcode 3.2.6、Xcode 4和Xcode 5得到的结果不同;两者都有MacOSX10.6。 我使用了以下代码来解密数据

- (NSData*)decryptData:(NSData*)data key:(NSData*)key iv:(NSData*)iv
{
    NSData* result = nil;

    // setup key
    unsigned char cKey[kCCKeySizeAES256];
    bzero(cKey, sizeof(cKey));
    cKey[0] = 0;
    [key getBytes:cKey length:kCCKeySizeAES256];

    // setup iv
    char cIv[kCCBlockSizeAES128];
    bzero(cIv, kCCBlockSizeAES128);
    if (iv) {
        [iv getBytes:cIv length:kCCBlockSizeAES128];
    }

    // setup output buffer
    size_t bufferSize = [data length] + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);

    // do decrypt
    size_t decryptedSize = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES128,
                                          kCCOptionPKCS7Padding,
                                          cKey,
                                          kCCKeySizeAES256,
                                          cIv,
                                          [data bytes],
                                          [data length],
                                          buffer,
                                          bufferSize,
                                          &decryptedSize);

    if (cryptStatus == kCCSuccess) {
        result = [NSData dataWithBytesNoCopy:buffer length:decryptedSize];
    } else {
        free(buffer);
        NSLog(@"[ERROR] failed to decrypt| CCCryptoStatus: %d", cryptStatus);
    }

    return result;
}

在Xcode 3.2.6中,我得到了实际的结果,而在Xcode 5中,结果是“.”

最佳选择:要么iv或键不正确,要么两者都不正确,可能是短了,因此一些随机数据进入了它们n记录它们并进行比较

区别不在于Xcode版本,而在于所使用的SDK。简而言之,CCCrypt可以工作,请检查您的代码


CBC模式需要iv,ECB模式不需要。

确保您正在OS 10.6上运行Xcode 5??最佳选择:要么iv或键不正确,要么两者都不正确,可能是做空了,所以一些随机数据进入了它们。记录它们并进行比较。另外,不同之处不在于Xcode版本,而在于所使用的SDK。简而言之,CCCrypt是有效的,请重新考虑一下,Mountain Lion上的code.Xcode5和Lion上的XCode4.3.3都有基本sdk macosx10.6。我在这个不同的平台上执行相同的代码。@zaph我使用的是CBC模式,所以我的iv通过为零,我也使用了正确的键。CBC模式需要iv,ECB移动不需要。在几个小时徒劳的谷歌搜索后,你救了我一命。