gpt4 book ai didi

ios - 在 iOS 中将 SecKeyRef 转换为 EC_KEY

转载 作者:行者123 更新时间:2023-11-29 00:33:40 29 4
gpt4 key购买 nike

我正在从 openSSL 创建 CSR,但由于 OpenSSL 没有将 key 存储在安全区域中,因此我选择 Objective-C 在安全区域中创建 key 对(私钥和公钥)并发送到 OpenSSL 以获得 X509 证书。我在 NSData 中成功获得公钥,然后转换 const unsigned char * bitsOfKeyDataPublicKey = (unsigned char *) [publicKey bytes]; 然后创建公钥 EC_KEY*_ec_keyPublic = d2i_EC_PUBKEY(NULL,&bitsOfKeyDataPublicKey , 公钥长度);.但是对于私钥,我们从 objective-c 获取 SecKeyRef 所以为了创建 EC_Key 我们如何转换私钥或者这是转换或使用私钥的任何方式?寻找回应。谢谢

最佳答案

您可以将私钥从 SecKeyRef 更改为 NSData

例子:

- (NSData *)getPrivateKeyBits {
OSStatus sanityCheck = noErr;
NSData * privateKeyBits = nil;

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

// Set the public key query dictionary.

[queryPrivateKey setObject:(id)kSecClassKey forKey:(id)kSecClass];
[queryPrivateKey setObject:_privateTag forKey:(id)kSecAttrApplicationTag];
[queryPrivateKey setObject:(id)kSecAttrKeyTypeEC forKey:(id)kSecAttrKeyType];
[queryPrivateKey setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnData];

// Get the key bits.
sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)queryPrivateKey, (void *)&privateKeyBits);

if (sanityCheck != noErr) {
privateKeyBits = nil;
}
else if (sanityCheck == errSecItemNotFound) {
privateKeyBits = nil;
}

return privateKeyBits;
}

不要忘记使用用于生成私钥的_privateTag

现在您可以使用:

const unsigned char *bitsOfKeyDataPrivateKey = (unsigned char *) [[self getPrivateKeyBits] bytes];
EC_KEY *_ec_keyPrivate = d2i_EC_PUBKEY(NULL,&bitsOfKeyDataPrivateKey, privateKeyLegnth);

关于ios - 在 iOS 中将 SecKeyRef 转换为 EC_KEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41138104/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com