2014-09-30 62 views
3

我需要使用公鑰將用戶密碼加密到base64字符串。來自NSString的iOS SecKeyRef

公鑰是一個NSString。

事情是這樣的:

「MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgWO7p1AvCaHUeaM6rSczBBAqt mKObHxGW3VgTom2zGwswGj9t/Hr7NdJQCGAiq0ijcW9/oYnM/JobbsyEijHKqIQm OVMsV4JRoG68PEDszH/ebkqWhzu7vG9IQ6VYIkaKHqk7cg + mQ1qFDoigOooFJ2Pf Uzbmg + Z/DuYDuwg + bwIDAQBC」

如何使一個SecKeyRef從它?

我發現了一個教程here

但我不能讓它工作,因爲SecCertificateCreateWithData總是返回零。

這是我的代碼

NSData* data = [NSString base64DataFromString:PUBLIC_KEY]; 
SecCertificateRef cert = NULL; 
SecPolicyRef  policy = NULL; 

cert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)(data)); 
policy = SecPolicyCreateBasicX509(); 

OSStatus  status  = noErr; 
SecKeyRef  *publicKey = NULL; 
SecTrustRef  trust  = NULL; 
SecTrustResultType trustType = kSecTrustResultInvalid; 

if (cert != NULL){ 
    SecCertificateRef certArray[1] = {cert}; 
    CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (void *)certArray, 1, NULL); 
    status = SecTrustCreateWithCertificates(certs, policy, &trust); 

    if (status == errSecSuccess){ 
     status = SecTrustEvaluate(trust, &trustType); 

     // Evaulate the trust. 
     switch (trustType) { 
      case kSecTrustResultInvalid: 
      case kSecTrustResultConfirm: 
      case kSecTrustResultDeny: 
      case kSecTrustResultUnspecified: 
      case kSecTrustResultFatalTrustFailure: 
      case kSecTrustResultOtherError: 
       break; 
      case kSecTrustResultRecoverableTrustFailure: 
       *publicKey = SecTrustCopyPublicKey(trust); 
       break; 
      case kSecTrustResultProceed: 
       *publicKey = SecTrustCopyPublicKey(trust); 
       break; 
     } 

    } 
} else { 
    NSLog(@"CERT == NULL"); 
} 

if (publicKey == NULL) { 
    NSLog(@"PUBLIC KEY == NULL"); 
} 

的SecKeyRef始終爲零,因爲該證書是零了。 請幫幫我。

回答