Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS RSA解密_Ios_Objective C_Rsa - Fatal编程技术网

iOS RSA解密

iOS RSA解密,ios,objective-c,rsa,Ios,Objective C,Rsa,我正在使用此网站生成公钥和私钥 我正试图找出如何从私钥创建SecKeyRef 我发现这看起来很有希望,但对我来说不起作用 下面是我尝试创建SecKeyRef的代码 NSString* publicKey = @"MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgHKzKc/6vphvntLiP1r/YvxjSLolPeDeOCy48ao5ymwNU2Nqbfeir/qHqbqSAhclAO8TGq8QIpE5ObAKNp2j01pu8Cu9AqwdtZ6EZa/NYah

我正在使用此网站生成公钥和私钥 我正试图找出如何从私钥创建SecKeyRef

我发现这看起来很有希望,但对我来说不起作用

下面是我尝试创建SecKeyRef的代码

 NSString* publicKey = @"MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgHKzKc/6vphvntLiP1r/YvxjSLolPeDeOCy48ao5ymwNU2Nqbfeir/qHqbqSAhclAO8TGq8QIpE5ObAKNp2j01pu8Cu9AqwdtZ6EZa/NYahfITKS8iYGs6cHzk2LGw8AqFOEJqHrW/xR8MOS1J765KeZOBCSrWZ5Ag/lpb5jxiDlAgMBAAE=";
    [[RSA sharedInstance] setPublicKey:publicKey];


我得到的是
serverPublicRef==nil
,但错误为0(这是正常的)。

kSecClassKey没有
kSecValueData
字段。你应该研究一下如何使用它

一些相关问题:


谢谢你的提示,你能再解释一下我需要用这种方法做什么和怎么做吗?我不知道你需要多少信息。因此,我添加了一些关于SecPKCS12Import的其他问题的链接。
- (BOOL)setPublicKey: (NSString *)keyAsBase64 {

    NSData *extractedKey =
                [[NSData alloc] initWithBase64EncodedString:keyAsBase64 options:0];

    /* Load as a key ref */
    OSStatus error = noErr;
    CFTypeRef persistPeer = NULL;

    NSData * refTag = [self.serverPublicIdentifier dataUsingEncoding:NSUTF8StringEncoding];

    NSMutableDictionary * keyAttr = [[NSMutableDictionary alloc] init];

    [keyAttr setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
    [keyAttr setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
    [keyAttr setObject:refTag forKey:(__bridge id)kSecAttrApplicationTag];

    /* First we delete any current keys */
    error = SecItemDelete((__bridge CFDictionaryRef) keyAttr);

    [keyAttr setObject:extractedKey forKey:(__bridge id)kSecValueData];
    [keyAttr setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnPersistentRef];

    error = SecItemAdd((__bridge CFDictionaryRef) keyAttr, (CFTypeRef *)&persistPeer);

    if (persistPeer == nil || ( error != noErr && error != errSecDuplicateItem)) {
        NSLog(@"Problem adding public key to keychain");
        return FALSE;
    }

    CFRelease(persistPeer);

    serverPublicRef = nil;

    /* Now we extract the real ref */
    [keyAttr removeAllObjects];
    /*
     [keyAttr setObject:(id)persistPeer forKey:(id)kSecValuePersistentRef];
     [keyAttr setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnRef];
     */
    [keyAttr setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
    [keyAttr setObject:refTag forKey:(__bridge id)kSecAttrApplicationTag];
    [keyAttr setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
    [keyAttr setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef];

    // Get the persistent key reference.
    error = SecItemCopyMatching((__bridge CFDictionaryRef)keyAttr, (CFTypeRef *)&serverPublicRef);

    if (serverPublicRef == nil || ( error != noErr && error != errSecDuplicateItem)) {
        NSLog(@"Error retrieving public key reference from chain");
        return FALSE;
    }

    return TRUE;
}