iOS_Skill_Collect

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

2018-02-10  本文已影响211人  wahkim

前言:后台老哥对接口的响应数据进行了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 ~~!

上一篇下一篇

猜你喜欢

热点阅读