2014-02-19 53 views
0

我嘗試使用CCCrypt的方法,但我得到的Xcode 3.2.6時,Xcode 4和Xcode的5個不同的結果;都有Mac OS X 10.6。 我用下面的代碼來解密數據CCCrypt上的Xcode 4和Xcode的5不起作用(得到不同的結果)

- (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的結果是「」。

+1

確保你的操作系統上運行10.6 Xcode的5 ..? – Jay

+0

最好的選擇:iv或者key或者兩者都不正確,可能會縮短,所以一些隨機數據正在進入。 NSLog記錄它們並進行比較。此外,差異不是Xcode版本,而是使用的SDK。簡而言之,CCCrypt的作品,重新認爲你的代碼。 – zaph

+0

Lion Lion上的Xcode5和Lion上的XCode4.3.3都有base sdk macosx10.6。我在這個不同的平臺上執行相同的代碼。 – sam

回答

0

最好的辦法:無論是靜脈或密鑰或兩者都是不正確的,可能要短,所以一些隨機數據進入他們。 NSLog登錄並比較

差異不Xcode的版本,但使用的SDK。總之,CCCrypt的作品,審查你的代碼。

CBC模式需要IV,ECB模式沒有。