【问题标题】:iOS RSA Encryption using SSH Public Key使用 SSH 公钥的 iOS RSA 加密
【发布时间】: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 公钥加密吗?非常感谢您在正确方向上提供的任何建议或指导。

【问题讨论】:

  • 你调用函数而不检查它们的返回值(SecTrustCreateWithCertificatesSecTrustEvaluate),我建议从检查这些开始......
  • 我越来越近了......这很大程度上取决于我必须使用的公钥没有与之关联或不包含的证书所以有没有“证书”关于我如何解决这个问题的任何想法? 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


【解决方案1】:

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

要在 iOS 上使用 RSA 公钥来加密数据,你必须欺骗 iOS 这个密钥是自己生成的。

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

【讨论】:

    猜你喜欢
    • 2015-04-02
    • 1970-01-01
    • 2011-11-10
    • 2014-06-23
    • 1970-01-01
    • 2019-05-08
    • 2011-11-07
    • 2013-05-07
    相关资源
    最近更新 更多