RSA+AES(涉及同步请求,URL encode)

分别完成RSA和AES之后我们需要汇通两者对接口进行加密操作,逻辑流程图(java端同事说明)。

  • RSA加密
  • AES加密

核心代码如下:

NSDictionary *stuDic = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"aaabbbc",@"userAccount",
                            @"123456",@"phoneCode",
                            @"123456",@"password",
                            @"1",@"AppTye",
                            nil];
    NSString *tempStr = [@"1|" stringByAppendingString:[self dictionaryToJson:stuDic]];
    NSString * jsonString =[self HAReplaceString:[NSString stringWithFormat:@"1|%@",[self dictionaryToJson:stuDic]] excuseString:@" " replaceSting:@""] ;
   NSString*  random =[NSString stringWithFormat:@"%@",[self getRandomNumber]];
//    NSString * BSAESKey = [GTMBase64 stringByEncodingData:[@"123456789" dataUsingEncoding:NSUTF8StringEncoding]];
    NSString * BSAESKey =   [GTMBase64 stringByEncodingData:[random dataUsingEncoding:NSUTF8StringEncoding]];
//        NSLog(@"random==\r%@",random);
    NSString * enAESkey = [BBRSACryptor encryptString:BSAESKey publicKey:public_key_string];
//    NSString * enParam  = [BBRSACryptor encryptString:jsonString publicKey:public_key_string];
    NSString * sign = [BBRSACryptor singString:jsonString privateKey:private_key_string];
//    NSLog(@"签名:\r%@",sign);
    NSString * enParam = [SecurityUtil encryptAESData:jsonString app_key:random];
//    NSLog(@"enString==\r%@",enParam);
//    NSString * deString = [SecurityUtil decryptAESString:enParam app_key:@"1234567891234567"];
//    NSString * enParam = [ BBRSACryptor AESEncryptWithKey:BSAESKey plainData:jsonString];
//    NSLog(@"deString==%@",deString);;
//    NSDictionary * dic =@{@"param":[NSString stringWithFormat:@"%@",enParam],@"aesKey":BSAESKey};
        NSDictionary * dic =@{@"param":[NSString stringWithFormat:@"%@|%@|%@",enAESkey,enParam,sign]};
//           NSLog(@"dic==%@===",dic);
    [HABaseRequest requestWithURLName:@"register/registV"
                                Parameter:dic
                             SuccessBlock:^(id returnValue) {
                                 NSLog(@"returnValue ==%@",returnValue);
                                 NSString * deString = [SecurityUtil decryptAESString:returnValue app_key:random];
                                 NSLog(@"deString ==%@",deString);

                                 
                             } FailBlock:^(NSError *error) {
    
                             }];
    
};
//生成随机数
- (NSString *)getRandomNumber{
    NSString *strRandom = @"";
    
    for(int i=0; i<16; i++)
    {
        strRandom = [ strRandom stringByAppendingFormat:@"%i",(arc4random() % 9)];
    }
    return strRandom;
}
//格式化Json
-(NSString *)HAReplaceString:(NSString *)replaceString excuseString:(NSString *)excuse replaceSting:(NSString *)replace{
    NSString *tempString = nil;
    if([replaceString rangeOfString:excuse].location != NSNotFound){
        //NSLog(@"字符串存在+");
        tempString = [replaceString stringByReplacingOccurrencesOfString:excuse withString:replace];
        return tempString;
    }
    //DLog(@"temp=%@==%@=%@", replaceString,excuse,replace);
    return replaceString;
}

三方联调参考代码
****RAS+AES同步请求****
工程中由于需要在一个模块中进行下载操作,引入了同步请求,是因为使用AF的同步并不能达到理想效果,然而在我未使用第三方框架前提下,对上传数据需要做一些转码操作方能进行加密任务,不然会对加密结果产生影响,显然需要一个方案来解决这个问题,encode URL这个可以对一些非法字符做转码操作来格式化链接

/**
 *  URL encode
 *
 *  @param unencodedString <#unencodedString description#>
 *
 *  @return String
 */
+(NSString*)encodeString:(NSString*)unencodedString{
    
    // CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
    
    // CharactersToLeaveUnescaped = @"[].";
    
    NSString*encodedString=(NSString*)
    
    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              
                                                              (CFStringRef)unencodedString,
                                                              
                                                              NULL,
                                                              
                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                              
                                                              kCFStringEncodingUTF8));
    
    return encodedString;
    
}

如有问题请留言······

你可能感兴趣的:(RSA+AES(涉及同步请求,URL encode))