2010-07-07 213 views
2

我想解密過去幾天的數據。我解密數據,但結果與原始數據不一樣。請,任何人都可以建議我如何做到這一點。我試圖解密以下數據:解密AES128加密的數據

加密數據: 「Mmb9tEkmW82oFPJb3vNhHA ==」

加密密鑰: 「91860F52E5C3A09BA3B827F28070E08D」

原始數據: 「馬可」

請幫助。 感謝

+0

你可能想給一些細節,其中加密的字符串來自和你是如何初始化的iPhone密碼庫。同時,這個SO Q可能會給你一些關於什麼可能出錯的想法 - http://stackoverflow.com/questions/538435/aes-interoperability-between-net-and-iphone – 2010-07-07 06:48:54

+1

第一步是base64解碼數據。 – 2010-07-07 11:10:31

回答

3

這是我如何使用AES128

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

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


- (NSData *)aesOperation:(CCOperation)op OnData:(NSData *)data { 
    NSData *outData = nil; 

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

    // Init out buffer 
    unsigned char outBuffer[BUFFER_SIZE]; 
    memset(outBuffer, 0, BUFFER_SIZE); 
    CCCryptorStatus status = -1; 

    status = CCCrypt(op, kCCAlgorithmAES128, kCCOptionPKCS7Padding, key, kCCKeySizeAES256, NULL, 
       dataIn, dataInLength, &outBuffer, BUFFER_SIZE, &outMoved); 

    if(status == kCCSuccess) { 
     outData = [NSData dataWithBytes:outBuffer length:outMoved]; 
    } else if(status == kCCBufferTooSmall) { 
     // Resize the out buffer 
     size_t newsSize = outMoved; 
     void *dynOutBuffer = malloc(newsSize); 
     memset(dynOutBuffer, 0, newsSize); 
     outMoved = 0; 

     status = CCCrypt(op, kCCAlgorithmAES128, kCCOptionPKCS7Padding, key, kCCKeySizeAES256, NULL, 
        dataIn, dataInLength, &outBuffer, BUFFER_SIZE, &outMoved); 

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

return outData; 
} 
+0

你可以分享完整的加密和解密模塊嗎? – 2012-03-19 10:51:53

+0

嘿,我使用相同的代碼,但stil解密時我得到-4301錯誤,無法解密字符串,你可以幫我解密使用AES128。 – 2013-06-12 16:48:07