我能够在PHP端使用OpenSSL公钥/私钥对成功地加密(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公钥加密吗?非常感谢您在正确方向上提供的任何建议或指导。
发布于 2015-02-03 18:08:36
出于安全原因,您无法在iOS上轻松地仅使用公钥进行加密。iOS上的加密要求很高,这就是为什么它在安全框架中。
要使用RSA公钥加密iOS上的数据,您必须欺骗iOS,使其相信该密钥是自己生成的。
请看这个问题:Encryption with RSA public key on iOS它为你提供了解决方案,以及GitHub上的完整代码演示。
https://stackoverflow.com/questions/21838387
复制相似问题