繁体   English   中英

使用SSH公钥的iOS RSA加密

[英]iOS RSA Encryption using SSH Public Key

我能够使用OpenSSL公钥/私钥对在iOS端成功加密(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公钥加密? 非常感谢您对正确方向的任何建议或指导。

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

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

看到这个问题: 在iOS上使用RSA公钥加密它为您提供了解决方案,以及在GitHub上的完整代码演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM