使用SSH公钥的iOS RSA加密

使用SSH公钥的iOS RSA加密,ios,encryption,ssh-keys,Ios,Encryption,Ssh Keys,我能够使用OpenSSL公钥/私钥对在PHP端成功加密(iOS)和解密。如果有人需要一个例子,请让我知道。只花了一整天,会很高兴与大家分享 但是,我想知道是否有人能够使用SSH中的公钥/私钥对进行同样的操作。这就是ssh-keygen生成的内容。当我使用生成的公钥/私钥中的公钥时,应用程序在尝试使用提供的公钥时会出错,并出现EXC_BAD_访问错误。所以,我甚至无法到达加密发送到服务器进行解密的点 // ERRORS AS NOTED BELOW //NSString *m

我能够使用OpenSSL公钥/私钥对在PHP端成功加密(iOS)和解密。如果有人需要一个例子,请让我知道。只花了一整天,会很高兴与大家分享

但是,我想知道是否有人能够使用SSH中的公钥/私钥对进行同样的操作。这就是ssh-keygen生成的内容。当我使用生成的公钥/私钥中的公钥时,应用程序在尝试使用提供的公钥时会出错,并出现EXC_BAD_访问错误。所以,我甚至无法到达加密发送到服务器进行解密的点

    // 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
//如下所述的错误
//NSString*myCertString=@“aaaab3nzac1yc2aaaadaqabaagqdqexvbuxabwrtbskj7puznw4rqufhyceogps5gwmir9mzouow9agqmtj0dmyy84/m890t8wnbWHcIk1D/tdmedp2osrhz4ftkpmt2g1pf1p1p1p1p1p5pvl2y/vwnvnvwqhjjjioyzqviamnylowq5lkcyx5lkcy1r1rjtw=”;
//工作
NSString*myCertString=@"Miidgcoggawibagijanb/D5A0C9ByMa0GCSqgSib3dqebkqmqswcqwwjVuzerma8Ga1eCavmLyz2LuawetabgNbgBacFjpy2HTB25KmrcWfqyDvqkda5WnCbgXzLbg9wWwWwwwwgVgjadef0Ga1EwzgVzwzwzwzwwzwwwwwzwwwwwwzwwwwzwwwzwww5jLnninninyzg2LzgV2Lnzg2LnzgVzg2MnTemqwzzzzzzzzzzzzgzzzzzzgzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz2.这个词的意思是一个词的意思意思是一个词的意思意思是一个词的意思是一个词的意思意思是一个词的意思是一个词的意思是一个词的意思是一个词的意思是一个词的意思是一个词的意思意思是一个词的意思是一个词的意思是一个词的意思是一个词的意思是一个词的意思是一个词的意思是一个词的意思意思是一个词的意思是一个词的意思是一个单词,或者或者一个词的意思是一个词的意思意思是一个词的意思是一个单词,或者或者或者或者或者或者或者一个词的意思是一个单词的意思意思是一个单词,或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者一个或者或者或者或者或者或者或者一个或者一个或者或者一个或者一个或者一个或者或者或者或者或者或者一个或者或者或者一个CJ1PPNJH9Z2B/10月2日,一位科学家提出了一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究方法——一种新的研究——一种新的研究方法——一种非非非非政府的非政府的非政府的非政府组织——一种非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的非政府的R9SEPYZPK8YYSWRU5JNMbcPM8MbTxm0PXg==”;
NSData*myCertData=[base64 decodeBase64WithString:myCertString];/[[base64 decodeBase64WithString:myCertString]dataUsingEncoding:NSUTF8StringEncoding];
SecCertificateRef cert=SecCertificateCreateWithData(kCFAllocatorDefault,(uu桥CFDataRef)myCertData);
CFArrayRef certs=CFArrayCreate(kcfalocatordefault,(const void**)和cert,1,NULL);
SecPolicyRef policy=SecPolicyCreateBasicX509();
部门信托;
SecturstCreateWithCertificates(证书、策略和信任);
SecTrustResultType信任结果;
部门信任评估(信任和信任结果);

publicKey=SecTrustCopyPublicKey(trust);出于安全原因,您无法在iOS上仅使用公钥轻松加密。iOS上的加密需要很多,这就是为什么它在安全框架中的原因

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


查看此问题:它为您提供了解决方案和GitHub上的完整代码演示。

您调用函数时没有检查其返回值(
SecTrustCreateWithCertificates
SecTrustEvaluate
),我建议从检查这些开始…我越来越接近了…这主要是因为我必须使用的公钥没有与其关联的证书,或者没有包含证书,所以没有“证书”关于如何解决这个问题的任何想法?SecCertificateRef cert为null,CFArrayRef是一个带有nul的数组证书2014-02-17 23:00:32.688玩笑[15430:70b]证书:(空)2014-02-17 23:00:32.688玩笑[15430:70b]证书:(空)