2011-06-27 50 views
3

當我從我的包中從p12文件讀取nsdata時,我可以提取標識。當我從p12文件讀取nsdata時提取標識

NSData *PKCS12Data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]  pathForResource:@"sample" ofType:@"p12"]]; 

但是當我保存它作爲BLOB和嘗試創建NSData的

PKCS12 *newp12; 

using NSData *PKCS12Data = [[NSData alloc] initWithBytes:&p12ptr length:length]; 

失敗....錯誤代碼-26275 osstatus。兩個事件nsdata顯示相同的字節..任何編碼問題? 請幫助

我使用提取的身份下面的代碼

securityError = SecPKCS12Import((CFDataRef)inPKCS12Data,(CFDictionaryRef)optionsDictionary,&items); 

    if (securityError == 0) { 
     CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex (items, 0); 
     const void *tempIdentity = NULL; 
     tempIdentity = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemIdentity); 
     *outIdentity = (SecIdentityRef)tempIdentity; 
     const void *tempTrust = NULL; 
     tempTrust = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemTrust); 
     *outTrust = (SecTrustRef)tempTrust; 
    } else 
    { 
     NSLog(@"Failed with error code %d",(int)securityError); 
     return NO; 
    } 
+1

你是什麼意思的'存儲爲一個blob'? 'newp12'與'p12ptr'相同嗎?如果不是,那麼'p12ptr'的類型是什麼? – 2011-06-27 12:14:28

回答

1

這是initWithBytes方法的文檔:

initWithBytes:長度:

返回一個數據對象通過添加一個 初始化給定的複製數據字節數來自給定緩衝區的。

  • (ID)initWithBytes:(常量無效*)字節長度:(NSUInteger)長度

而且你的代碼是這樣做的:

NSData *PKCS12Data = [[NSData alloc] initWithBytes:&p12ptr length:length]; 

你可以看到,你在地址中傳遞給p12ptr的第一個參數。我假設這個變量不是一個字節?如果不是的話,那麼你傳遞了一個不正確的函數指針,而NSData試圖用長度來初始化自己的內存空間中某個隨機位置的字節數。

請問您可以在哪裏聲明p12ptr以及初始化它的位置?

相關問題