2012-06-13 150 views
1

我需要在我的iPhone應用程序中執行AES 256解密。這種情況是,純文本是使用AES256位(OFB模式)在聯機網頁中進行base64編碼和加密的。 在我的應用程序中,我從該網頁獲取加密文本作爲查詢字符串。這裏我已經完成了base64解碼和AES256解密。 但我得到-4304狀態。我使用了kCCOptionPKCS7Padding。即使我也改變填充,我沒有得到正確的解密純文本。只顯示不可讀的文字。AES256解密與base64解碼不起作用

我已經使用http://isv.appspot.com/app/enc通過設置OFB模式來檢查base64的AES256加密。

以下代碼對我使用的base64解碼和解密AES256兩種方法

+ (NSString*)decryptBase64String:(NSString*)encryptedBase64String keyString:(NSString*)keyString 
{ 
    NSData* encryptedData = [NSData dataFromBase64String:encryptedBase64String]; 
    NSLog(@"encryptedData %@",encryptedData); 
    // NSData *strData = [encryptedData subdataWithRange:NSMakeRange(0, [encryptedData length] - 2)]; 
    // NSString* newStr = nil; 
    NSData* keyData = [keyString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData* data = [self decryptData:encryptedData 
           key:keyData 
            iv:nil]; 
    // newStr = [NSString stringWithCString:[strData bytes] encoding:NSUTF8StringEncoding]; 

    if (data) { 

     return [[[NSString alloc] initWithData:data 
             encoding:NSASCIIStringEncoding] autorelease]; 
    } else { 
     return nil; 
    } 
} 



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

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

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

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

    // do decrypt 
    size_t decryptedSize = 0; 
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, 
              FBENCRYPT_ALGORITHM, 
              kCCOptionPKCS7Padding, 
              cKey, 
              FBENCRYPT_KEY_SIZE, 
              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; 
} 

誰能幫助我得到使用這種方法的純文本?

+0

什麼文件說什麼導致-4304狀態? – rossum

+1

你見過這個:http://stackoverflow.com/questions/7408754/unable-to-decrypt-data-encoded-via-openssl-on-iphone –

+0

出於好奇,你說純文本是用base64編碼的。這並不一定意味着加密的密文是,但是您將加密數據設置爲base64? – trumpetlicks

回答

0

根據您的問題中的事實,base64編碼數據被加密,而不是解碼後的數據變化。因此,您需要解密base64編碼的數據,然後base64對其進行解碼。