前言:后臺(tái)為防止接口被抓包嘹狞,毅然決然的要求我在添加一個(gè)請(qǐng)求的頭參數(shù)赂蠢,并對(duì)該參數(shù)進(jìn)行sha1加密,而且該參數(shù)加密之前有一定的算法格式(哈希算法砰蠢,具體給的算法在這里我就不說(shuō)了)蓖扑。
1.在加密之前,先需要對(duì)滿足后臺(tái)給的格式,下面是我模擬
的格式是一個(gè)拼湊的字典
{
timestamp = 1518229804台舱;
ua = iPhone;
}
2.然后需要把上面的字典轉(zhuǎn)化成json字符串
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonSign options:-1 error:nil];
NSString *resultJson = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
下面解釋一下options
參數(shù)
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`會(huì)出現(xiàn) 打印的是下面的字符串律杠,帶\n和\r
{
timestamp = 1518229804;
ua = iPhone;
}
使用`NSJSONWritingSortedKeys `會(huì)出現(xiàn) 打印的是下面的字符串竞惋,沒(méi)有\(zhòng)n和\r
{ timestamp = 1518229804;ua = iPhone;}
//服務(wù)端老哥要求我傳這個(gè)格式柜去。但是這個(gè)參數(shù)只支持ios(11.0), 這時(shí)候咋辦。下面分解
3.當(dāng)然是使用NSJSONWritingPrettyPrinted
,然后去除空格和換行符...
resultJson = [resultJson stringByReplacingOccurrencesOfString:@"\r" withString:@""];
resultJson = [resultJson stringByReplacingOccurrencesOfString:@"\n" withString:@""];
4.進(jìn)行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<CC_SHA1_DIGEST_LENGTH; i++) {
[sign appendFormat:@"%02x", digest[i]]; //得到sign
}
nice ~ .~ !