- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要使用公钥将用户密码加密为 base64 字符串。
公钥是一个 NSString。
是这样的:
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgWO7p1AvCaHUeaM6rSczBBAqt mKObHxGW3VgTom2zGwswGj9t/Hr7NdJQCGAiq0ijcW9/oYnM/JobbsyEijHKqIQm OVMsV4JRoG68PEDszH/ebkqWhzu7vG9IQ6VYIkaKHqk7cg+mQ1qFDoigOooFJ2Pf Uzbmg+Z/DuYDuwg+bwIDAQBC"
如何从中创建 SecKeyRef?
我找到了教程here
但我无法让它工作,因为 SecCertificateCreateWithData 总是返回 nil。
这是我的代码
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 始终为 nil,因为证书也为 nil。请帮助我。
最佳答案
您不能只传递关键数据。您必须通过由您的 key 签名的证书才能从证书中提取 key 。参见 this answer到 similar question .
关于来自 NSString 的 iOS SecKeyRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26119952/
我生成一个 RSA 公钥/私钥对,如下所示: CFDataRef privateTag; CFDataRef publicTag; SecKeyRef publicKey; SecKeyRef pri
我正在使用此代码:https://stackoverflow.com/a/19221754/849616 ,但对我来说并非一切都清楚。 我想使用公钥 NSString *pubKey = "1111"
我有一个 RSA key (对)表示为大整数模数和指数,需要用它们进行加密/解密。 我想出了如何使用 swift 在 iOS 中根据需要处理按键。 我的问题:有什么方法可以将模数/指数表示转换为标准的
这个问题在这里已经有了答案: Extracting a public key from key pair in key chain (2 个答案) 关闭 9 年前。 现在我的公钥有问题,我使用 Se
我有两个 key ,公钥和私钥,都存储在 SecKeyRef 变量中。为了简单起见,让我们从公共(public)的开始。我想做的是将它导出到一个 NSData 对象。为此,Apple 提供了一个几乎著
为了从 iPhone 发送和接收加密消息,我需要读取公钥(服务器的公钥)PEM 文件并创建一个 SecKeyRef(后来我什至可以将其存储在钥匙串(keychain)上,以免创建它)再次)。 这是我当
我用 SecKeyGeneratePair 生成了私钥和公钥我已经将 SecKeyRef 转换为 NSData size_t keySize = SecKeyGetBlockSize(publicKe
我需要使用公钥将用户密码加密为 base64 字符串。 公钥是一个 NSString。 是这样的: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgWO7p1AvCa
我有一个从远程服务器收集的公钥,我想使用该公钥执行 RSA 加密。但问题是我将公钥数据作为缓冲区中的字节数组获取。我可以将它转换为 NSData 但我不能转换为 SecKeyRef 所以我可以继续加密
给定一个使用 SecItemImport 从 RSA 私钥加载的 SecKeyRef 有没有办法只为公钥获取或创建一个 SecKeyRef组件?在 OpenSSL 中,这可以通过将模数和公共(publ
我想通过将指数和模数作为私钥来解密 iPhone 上的 RSA 编码的 blob。在 Java 中(使用 javax.crypto),这可以通过如下代码轻松实现: // 1) key RSAPubli
我正在开发一个 iOS 应用程序,我得到一个 base64 编码的公钥,例如: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3gn+tJ1+PbP0GHa6hmM35
我在设备上使用 SecKeyGeneratePair() 在设备上生成了一个 RSA 对称 key 对。我有每个键的 SecKeyRef 结构指针。那么,如何将 SecKeyRef 保存到磁盘?甚至传
任何人请帮助从指数和模数创建SecKeyRef作为我的公共(public)指数 = 010001和 公共(public)模数 =008903fb6d15f352ed3b45add3216f632f71
我需要将我的iPhone应用程序与系统集成,他们需要通过给定的公钥加密数据,有3个文件,3种不同的格式.xml .der和.pem,我研究并找到了一些关于从 DER/PEM 获取 SecKeyRef,
我想从从 OpenSSL 创建的 EC_KEY 导出公钥和私钥,并且我们知道 EC_KEY 保存 key 对,但 openssl 不兼容将 key 对存储到安全中飞地。因此,我想从 OpenSSL 创
在 Swift 中,我创建了一个 SecKeyRef通过调用对象 SecTrustCopyPublicKey在一些原始 X509 证书数据上。这就是这个 SecKeyRef 对象的样子。 Option
我需要一种干净的方法来提取我的服务器公钥并将其与本地数据进行比较,以防止将来过期/更新 key ,但我似乎无法获得 256 位 key 或表达它作为比较有用的数据... 这是我目前所拥有的... -(
我有一个 Base64 格式的 RSa publicKey 值,如何在不添加到 Keychain 的情况下转换为 SecKeyRef 对象 我可以将非 X509 格式的 RSA Raw 值添加到 Ke
我正在尝试使用 OSX 中的安全转换创建对称加密 key ,然后将该 key 保存到钥匙串(keychain)中。我能够创建一个工作 key 并将其保存到钥匙串(keychain)中,但是当我调用该
我是一名优秀的程序员,十分优秀!