【发布时间】:2014-03-17 07:09:42
【问题描述】:
我能够使用 OpenSSL 公钥/私钥对在 PHP 端成功加密 (iOS) 和解密。如果有人需要示例,请告诉我。只花了一整天,很乐意分享。
但是,我想知道是否有人能够使用来自 SSH 的公钥/私钥对来做同样的事情。那是从 ssh-keygen 生成的。当我使用生成的公钥/私钥中的公钥时,应用程序在尝试使用提供的公钥时会出错并出现 EXC_BAD_ACCESS。所以,我什至无法达到我什至加密发送到服务器进行解密的地步。
// ERRORS AS NOTED BELOW
//NSString *myCertString = @"AAAAB3NzaC1yc2EAAAADAQABAAAAgQDQexvBUxaBWRtbSkj7puZNw4rqUD1FhhYCEogpS5GwMir9mZOuOw9aGQmTJ0DmYY84/m890t8wnbWHcIk1D/TDMeDP2OSRHz4FtkPMt2G1Pf1lkvEhd9S5PvL2y/vwnvqhjIOYzqvIamnYloOwXQZ5lKcYxuFu7btMLYr1Rd1jtw==";
//WORKS
NSString *myCertString = @"MIIDGDCCAoGgAwIBAgIJANB/d5a0c9bYMA0GCSqGSIb3DQEBBQUAMIGkMQswCQYDVQQGEwJVUzERMA8GA1UECAwIVmlyZ2luaWExETAPBgNVBAcMCFJpY2htb25kMRcwFQYDVQQKDA5WNCBEZXZlbG9wbWVudDENMAsGA1UECwwEVGVjaDEfMB0GA1UEAwwWZGVyZWsuZW5jLnNiLnY0ZGV2LmNvbTEmMCQGCSqGSIb3DQEJARYXZGVyZWtAdjRkZXZlbG9wbWVudC5jb20wHhcNMTQwMjE3MTYyMTMyWhcNMjQwMjE1MTYyMTMyWjCBpDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCFZpcmdpbmlhMREwDwYDVQQHDAhSaWNobW9uZDEXMBUGA1UECgwOVjQgRGV2ZWxvcG1lbnQxDTALBgNVBAsMBFRlY2gxHzAdBgNVBAMMFmRlcmVrLmVuYy5zYi52NGRldi5jb20xJjAkBgkqhkiG9w0BCQEWF2RlcmVrQHY0ZGV2ZWxvcG1lbnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDAeJpcV7Nu/QAh/4ZY4nKno+6BEfWUc2An3+lsE8rH2Z2s2WlNZ869nFvTLRlus3NEp9EaS4xej9YEuwFdMii2BWjd+e2Lh2hvkS0I7FO+cJ1PPNnJh9z2b/NhPEeWpu09/Th2TiaEKBqlt0YK3eQHpxuZunKzqGUmqonX8TBewIDAQABo1AwTjAdBgNVHQ4EFgQUnOSxBSCihWtJXFX7xgLQQjzNe10wHwYDVR0jBBgwFoAUnOSxBSCihWtJXFX7xgLQQjzNe10wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCNFuaV9o4FEQ/bhKABSDOcwy/sD/u0CwXtBj5UHjNPPw1Mqo5wwZHSgo5u8ruXmjyRCiG5w5+gE04ygAcWuMFdba0Mc3a3A4HO5Jr+JdEXL/82ZSHCfYBPcuLXJ+VmM4dMgTxamVBDR9sepyZpK8YySWru5JNMbcPM8MbTxm0PXg==";
NSData *myCertData = [base64 decodeBase64WithString:myCertString];//[[base64 decodeBase64WithString:myCertString] dataUsingEncoding:NSUTF8StringEncoding];
SecCertificateRef cert = SecCertificateCreateWithData (kCFAllocatorDefault, (__bridge CFDataRef)myCertData);
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL);
SecPolicyRef policy = SecPolicyCreateBasicX509();
SecTrustRef trust;
SecTrustCreateWithCertificates(certs, policy, &trust);
SecTrustResultType trustResult;
SecTrustEvaluate(trust, &trustResult);
publicKey = SecTrustCopyPublicKey(trust); <-- ERRORS with EXC_BAD_ACCESS
任何想法都会很棒。或者,iOS 只是不支持 SSH 公钥加密吗?非常感谢您在正确方向上提供的任何建议或指导。
【问题讨论】:
-
你调用函数而不检查它们的返回值(
SecTrustCreateWithCertificates,SecTrustEvaluate),我建议从检查这些开始...... -
我越来越近了......这很大程度上取决于我必须使用的公钥没有与之关联或不包含的证书所以有没有“证书”关于我如何解决这个问题的任何想法? SecCertificateRef 证书为空,CFArrayRef 是一个带有空证书的数组。 2014-02-17 23:00:32.688 Banter[15430:70b] 证书:(null) 2014-02-17 23:00:32.688 Banter[15430:70b] 证书:((null))
标签: ios encryption ssh-keys