iOS_对AFNetWorking的请求头参数进行sha1加密

前言:后台为防止接口被抓包,毅然决然的要求我在添加一个请求的头参数,并对该参数进行sha1加密,而且该参数加密之前有一定的算法格式(哈希算法,具体给的算法在这里我就不说了)。

1.在加密之前,先需要对满足后台给的格式,下面是我模拟的格式是一个拼凑的字典

{
    timestamp = 1518229804;
    ua = iPhone;
}

2.然后需要把上面的字典转化成json字符串

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonSign options:-1 error:nil];
NSString *resultJson = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];

下面解释一下options参数

NSJSONWritingPrettyPrinted = (1UL << 0),
/* Sorts dictionary keys for output using [NSLocale systemLocale]. Keys are compared using NSNumericSearch. The specific sorting method used is subject to change.
     */
NSJSONWritingSortedKeys API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)) = (1UL << 1)

-----------------------------------------------------
使用`NSJSONWritingPrettyPrinted`会出现 打印的是下面的字符串,带\n和\r
{
    timestamp = 1518229804;
    ua = iPhone;
}

使用`NSJSONWritingSortedKeys `会出现 打印的是下面的字符串,没有\n和\r
{ timestamp = 1518229804;ua = iPhone;}

//服务端老哥要求我传这个格式。但是这个参数只支持ios(11.0), 这时候咋办。下面分解

3.当然是使用NSJSONWritingPrettyPrinted,然后去除空格和换行符...

 resultJson = [resultJson stringByReplacingOccurrencesOfString:@"\r" withString:@""];
 resultJson = [resultJson stringByReplacingOccurrencesOfString:@"\n" withString:@""];

4.进行sha1 加密

//sha1加密
    NSData *sha1Data = [resultJson dataUsingEncoding:NSUTF8StringEncoding];
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(sha1Data.bytes, (unsigned int)sha1Data.length, digest);
    NSMutableString *sign = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    for(int i=0; i

nice ~ .~ !

你可能感兴趣的:(iOS_对AFNetWorking的请求头参数进行sha1加密)