随着网络的发展,加密对于客户端来说越来越重要,很多金融公司招聘要求明确提出精通客户端的加密处理。今天就个人所接触的客户端加密处理做下记录分享。
1、首先最外层,对每次网络接口的调取都会拼接一个时间戳serverTime,这个时间戳从服务器获取,服务器判断时间戳的有效期。超过有效期则判断此次请求无效,抛弃这次请求。可根据实际情况,自行设置过期时间
2、创建出客户端token,ClientToken生成 代码如下
//获取服务器时间戳的天
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
NSDate*confromDate = [NSDate dateWithTimeIntervalSince1970:[UserManager sharedUserManager].serverTime];
[formatter setDateFormat:@"d"];
int day=[[formatter stringFromDate:confromDate] intValue];
int s1=[self getRandomNumber:1000to:9999];
NSString*s2temp= [NSString stringWithFormat:@"%@%ld",k_SymmetricKey,(long)day];//改为服务器时间
NSString*s2= [[s2temp md5] substringToIndex:10];
NSString*s3= [self conversionSixteen: ([UserManager sharedUserManager].serverTime+s1)];
NSString*clientToken=[NSString stringWithFormat:@"%ld%@%@",(long)s1,s2,s3];
return clientToken;
3、添加加密sign签名 paramater[@"sign"]=[self securtyParameter:paramater];
把参数字典paramater转化为字符串。然后进行MD5编码。编码后再拼接上一个私钥,然后再进行一次MD5.生成一个新的字符串作为sign签名
4、最后将以上包含所有参数的字典通过转成json格式的字符串,同时进行两次base64加密,生成最终的需上传服务器的字符串encryptedStr。
加密方式有多种多样,各种排列组合可根据个人公司的实际需要设定。但基本思路不变,事先和服务器约定好的规则进行即可。实际上我们做不到密码的绝对安全,但是破解密码的代价大于被破解事物的价值,我们做到这点,就可以有效的防范黑客的攻击,保障我们客户端的安全。