首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iOS公钥的SSH加密

使用iOS公钥的SSH加密
EN

Stack Overflow用户
提问于 2014-02-18 04:10:27
回答 1查看 1.6K关注 0票数 0

我能够在PHP端使用OpenSSL公钥/私钥对成功地加密(iOS)和解密。如果有人需要一个例子,请让我知道。只花了一整天的时间,就会乐于分享。

但是,我想知道是否有人能够使用SSH中的公钥/私钥对来做同样的事情。这就是从ssh-keygen生成的内容。当我使用生成的公钥/私钥中的公钥时,应用程序在尝试使用提供的公钥时出现EXC_BAD_ACCESS错误。所以,我甚至不能达到加密发送到服务器进行解密的地步。

代码语言:javascript
复制
    // 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公钥加密吗?非常感谢您在正确方向上提供的任何建议或指导。

EN

回答 1

Stack Overflow用户

发布于 2015-02-03 18:08:36

出于安全原因,您无法在iOS上轻松地仅使用公钥进行加密。iOS上的加密要求很高,这就是为什么它在安全框架中。

要使用RSA公钥加密iOS上的数据,您必须欺骗iOS,使其相信该密钥是自己生成的。

请看这个问题:Encryption with RSA public key on iOS它为你提供了解决方案,以及GitHub上的完整代码演示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21838387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档