2012-07-29 71 views
0

我在NSData + AES256類中有以下代碼。我正在用以下代碼嘗試AES CBC加密到NSString。我有一把鑰匙和一個四。但結果爲空。無法找出問題所在。這是我tried-iphone cbc加密返回null

NSString *initV= @"somekey*********"; 
NSData *input= [initV dataUsingEncoding:NSUTF8StringEncoding]; 


size_t numBytesEncrypted = 0; 
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCModeCBC, 
             keyPtr, kCCKeySizeAES256, 
             [input bytes] /* initialization vector (optional) */, 
             [self bytes], dataLength, /* input */ 
             buffer, bufferSize, /* output */ 
             &numBytesEncrypted); 
+0

我不是一個專業的iPhone開發者或任何東西。但是我注意到,有時IV和輸入數據將使用base64加密或二進制加密。您的IV /密鑰對是base64還是二進制編碼? – Raiden 2012-07-29 05:41:09

+0

嗨,感謝您的評論。我能夠通過使用以下兩個函數來解決它 - CCCryptorCreate CCCryptorUpdate 感謝最後的評論[在這裏](http://stackoverflow.com/questions/4540725/iphone-aes-256-encryption-without -padding) – 2012-07-29 09:11:25

回答

0

這是爲我工作finally-

-(NSData *)AES256EncryptWithKey:(NSString *)key { 
NSUInteger dataLength = [self length]; 
NSData *keyGiven= [key dataUsingEncoding:NSUTF8StringEncoding];  

size_t bufferSize = dataLength + kCCBlockSizeAES128; 
void *buffer = malloc(bufferSize); 

NSString *initV= @"***************"; 
NSData *input= [initV dataUsingEncoding:NSUTF8StringEncoding]; 

size_t numBytesEncrypted = 0; 

CCCryptorRef ccRef; 
CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES128, 0, (const void *)[keyGiven bytes], kCCKeySizeAES256, (const void *)[input bytes], &ccRef); 
CCCryptorStatus cryptStatus = CCCryptorUpdate(ccRef, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); 
CCCryptorRelease(ccRef); 

if (cryptStatus == kCCSuccess) { 
    return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 
} 
free(buffer); //free the buffer; 
return nil; 
} 

我將一個NSString NSData的來並將其傳遞加密的代碼。 NSString必須是16個字符。如果它少於16個字符,則通過追加空格將其設置爲16。

我不知道這是否會幫助任何人。但我只是覺得我應該分享。謝謝。

+0

請注意,這是創建密鑰的一種非常不安全的方式。你幾乎把所有的熵都扔掉了。請參閱http://robnapier.net/blog/aes-commoncrypto-564進行全面討論,以及如何正確執行此操作。你也使用固定的IV,這也是非常不安全的。 – 2012-08-13 18:07:02