2017-09-15 81 views
-1

我已將加密字符串「我是個好孩子」並帶有密鑰「1234」,我想解密它。這是我的代碼,但它最終輸出「NULL」,但不是「我是一個好孩子」。我怎樣才能得到正確的結果?如何在iOS中使用AES256解密字符串

NSString *content = @"VvHjCwHUjIgZOiYlncPWEoX/UInS7ZNbC4sy8ESa/fM="; 

NSData *contentData = [content dataUsingEncoding:NSUTF8StringEncoding]; 
NSUInteger dataLength = contentData.length; 

NSString *key = @"1234"; 

char keyPtr[kCCKeySizeAES256+1]; 
bzero(keyPtr, sizeof(keyPtr)); 
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 

size_t bufferSize = dataLength + kCCBlockSizeAES128; 
void *buffer = malloc(bufferSize); 
size_t numBytesDecrypted = 0; 
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 
             kCCOptionPKCS7Padding, 
             keyPtr, kCCKeySizeAES256, 
             NULL, 
             contentData.bytes, dataLength, 
             buffer, bufferSize, 
             &numBytesDecrypted); 
if (cryptStatus == kCCSuccess) { 
    NSData *result = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; 
    if(result) { 
     NSString * string = [[NSString alloc]initWithData:result encoding:NSUTF8StringEncoding]; 
     NSLog(@"%@",string); 
    } 
}else { 
    free(buffer); 
} 
+0

1.「爲什麼不是代碼工作」類型的Q超出了SO的範圍。 2.至少:你具體的Q是什麼?錯誤訊息?錯誤的結果?哪一個?預期結果? –

+0

感謝您的回答。我的問題是爲什麼它返回NULL而不是「我是一個好孩子」 –

回答

0

您的數據看起來像是base64編碼。你應該這樣解碼:

NSData *contentData = [[NSData alloc] initWithBase64EncodedString:content options:0]; 
+0

它確實對我有用。非常感謝你。 –