美文网首页iOS_Skill_Collect
iOS_服务端提供.pem公钥文件,对API RSA2加密的数据

iOS_服务端提供.pem公钥文件,对API RSA2加密的数据

作者: wahkim | 来源:发表于2018-02-10 10:21 被阅读211次

    前言:后台老哥对接口的响应数据进行了RSA2加密,给老衲提供了一个.pem公钥的文件,以便我们获取公钥对api响应的内容进行解析。

    #define PublicKeyFile [[NSBundle mainBundle] pathForResource:@"server_public" ofType:@"pem"]
    
    //使用公钥 .pem文件 对服务器RSA2 解密 
    +(NSString *)RSA2DecodingWithString:(NSString *)str //这里的str就是接口响应的数据一长串
    {
        unsigned char encrypted[2048];
        bzero(encrypted, sizeof(encrypted));
        NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:0];
        //    NSData *data = [NSData dataWithBytes:contentChar length:128];
        
        
        //明文
        char decrypted[2048];
        //公钥和私钥文件
        const char* pub_key = [PublicKeyFile UTF8String];
        // 打开私钥文件
        FILE* pub_fp=fopen(pub_key,"r");
        if(pub_fp==NULL){
            printf("Open Failed!! The Priv_Key File :%s!\n", pub_key);
            return nil;
        }
        
        
        // 从文件中读取公钥
        RSA *rsa = PEM_read_RSA_PUBKEY(pub_fp, NULL, NULL, NULL);
        if(rsa==NULL){
            printf("Pub_Key Read Failure!!\n");
            return nil;
        }
        // 用公钥解密
        int state = RSA_size(rsa);
        state = RSA_public_decrypt(state, (unsigned char*)[data bytes], (unsigned char*)decrypted, rsa, RSA_PKCS1_PADDING);
        if(state == -1){
            printf("Decrypt Failed!!\n");
            return nil;
        }
        fclose(pub_fp);
        
        
        // 输出解密后的明文
        decrypted[state]=0;
        NSString *result = [NSString stringWithUTF8String:decrypted];
    //    NSLog(@"---%@",result);
        return result;
    }
    

    上面封装的方法返回的是一个json字符串,需要进行对应格式的数据

    NSData *jsonData = [RSAString dataUsingEncoding:NSUTF8StringEncoding];
     NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:NULL];
    //resultDic 就是我们想要的数据
    

    以上参考自一个大大的博客,具体地址忘记了,sor ~~!

    相关文章

      网友评论

      • 夏当:大佬,那个方法 是不是需要导入什么头文件

      本文标题:iOS_服务端提供.pem公钥文件,对API RSA2加密的数据

      本文链接:https://www.haomeiwen.com/subject/ygjctftx.html