iOS之网络请求初解-网络安全

最近,苹果公司发布了新通知,大致是要求升级https吧,大部分公司也在开始升级https,其实升级过后,对我们客户端改动量不大。今天,我们主要讨论的是,iOS请求中的用户安全。

在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题。如:可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据。因此,在提交数据的时候,我们要尽量避免明文提交,采用加密传输。

282010218202346.png

在做网络请求的时候,我们通常也需要对请求参数做一个不可逆的加密,不仅仅是字符加密,还需要添加一个动态的加密参数,尤其是涉及到账户资金,积分,密码等操作的时候,如果所有参数均采用明文的话,只要对方对网络请求稍有研究,对方则可通过网络抓包工具,可以获取到我们请求的全过程,然后对方模拟我们得网络请求,则可模拟出和我们正常操作一样的流程,从而获取到我们的信息,并且去进行一些不法操作,如盗窃账户资金,充值积分,模拟聊天信息等,对我们开发者,用户均会造成很大程度上的影响。

字符加密的话,大家也大致清楚,常用的为md5,aes,des等,通常情况下这些加密都是不可逆的,网络所谓的md5反编译,只是建立的一个相对的md5反编译字典,通过一一比对去得到相应的值,只要我们的字符不要太过简单,则是无法反编译出来的,这通常用于保护密码等信息不被他人盗用。在请求过程中,我们还需要添加一个动态加密字段,动态加密字段,一般是选择用户ID+动态随机字符串,因为如果我们直接添加一个加密字段,对方网络请求的时候,可以不理会加密方式,直接请求,也能获取到结果。而动态字段则不同,每次请求的时候,都会去进行比对,比对过后这一串字符次就已经失效,不会二次与数据库进行比对,则请求失败,如果对方简单修改字符串,与数据库比对失败,同样不会完成请求,就相对的保护了我们账户安全。

在动态字符串选取的过程中,我们可以选择随机生成16位随机字符串,然后通过md5,这其中重复的概率就相当低了,也不容易被破解。当然我们也可以选择当前时间戳,时间戳随时都在变化,再加上我们固定字段,被破解以及重复的概率都会降到极低点,这个随机字符串选取主要是看个人喜好,也没有固定要求。在这里,我也简单附上部分代码吧,这部分代码我并没有重新写,而是在网上copy的一段,大家将其运用在网络请求中即可:

  #define Salt @"fsdhjkfhjksdhjkfjhkd546783765"

/** * 直接用MD5加密 */ 
- (NSString *)digest:(NSString *)str {    
	NSString *anwen = [str md5String];
	NSLog(@"%@ - %@", str, anwen);     
	return anew; 
}  
/**  *  加入随机字符串  */ 
- (NSString *)digest2:(NSString *)str {
     str = [str stringByAppendingString:Salt];
     NSString *anwen = [str md5String];
     NSLog(@"%@ - %@", str, anew);
     return anwen; }  
/**  *  多次MD5  */ 
- (NSString *)digest3:(NSString *)str {
     NSString *anwen = [str md5String];
     anwen = [anwen md5String];
     NSLog(@"%@ - %@", str, anew);
     return anew; 
}  
/**  *  先加密, 后乱序  */ 
- (NSString *)digest4:(NSString *)str {
     NSString *anwen = [str md5String];          
	// 注册:  123 ----  2CB962AC59075B964B07152D234B7020
     // 登录: 123 --- 202CB962AC59075B964B07152D234B70
     
     NSString *header = [anwen substringToIndex:2];
     NSString *footer = [anwen substringFromIndex:2];
     anwen = [footer stringByAppendingString:header];
     
     NSLog(@"%@ - %@", str, anwen);
     return anwen;
 }

对于网络请求的初步加密大概就是如此,当然如果需要更加安全的加密,则需要对请求地址也进行加密,致使抓包的时候,不能获取到完整的请求信息,从而达到更好的加密效果。当然这需要前后端建立统一的加密解密库,过程就相对繁琐,大致贴下使用代码吧:

#include "paramcodec.h"


/

//

    char (*arrMap)[2][MAX_STR_LEN];

    int str_len, ret, num;

    char *strEncode;


    num = 2;

    arrMap = malloc( num * MAX_STR_LEN * 2 );


    strcpy( arrRestore[0][0],"name" );

    strcpy( arrRestore[0][0],"John doe" );

    strcpy( arrRestore[0][0],"userID" );

    strcpy( arrRestore[0][0],"1000215" );


    strEncode = malloc( num * MAX_STR_LEN * 4 );


    ret = ParamEncode( strEncode, &str_len, arrMap, num );

    DebugPrintf( "ret: %s    str_len=%d\n", strEncode, str_len );


通过二维数组将参数一一对应加密,然后通过特定的加密方式,达到他们不能轻易解析的效果,编程之路漫漫其修远兮,吾将上下而求索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值