2010-07-07 154 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