iOS 開(kāi)發(fā) 網(wǎng)絡(luò)請(qǐng)求添加簽名


簽名算法要求:

請(qǐng)求參數(shù)增加、signStr,其中signTime為當(dāng)前時(shí)間戳、signStr為16位隨機(jī)字符串。

第一步,將所有請(qǐng)求參數(shù)按照參數(shù)名ASCII碼從小到大排序(字典序),再使用URL鍵值對(duì)的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

第二步,在stringA最后拼接上key得到stringSignTemp字符串,并對(duì)stringSignTemp進(jìn)行MD5運(yùn)算,再將得到的字符串所有字符轉(zhuǎn)換為大寫(xiě),得到sign值signValue。


注意: 簽名算法進(jìn)行簽名后作為發(fā)送請(qǐng)求時(shí)的一個(gè)參數(shù),

比如:發(fā)送請(qǐng)求時(shí)參數(shù)為NSDictionary*dict = @{ @"id" :@"10",

@"page":@"1",

@"signTime":@"1464147000",

@"signStr":@"c1bhbqiolpn6xs31"};

對(duì)參數(shù)進(jìn)行簽名

NSString *signStr = [xx encoingWithDic:dict?? Withcharacter:@"c1bhbqiolpn6xs31"];

把返回的簽名作為其中一個(gè)參數(shù)

[dict setObject:signStr forKey:@"sign"]

接下來(lái)就是用這個(gè)合成的字典進(jìn)行請(qǐng)求數(shù)據(jù)啦!


/** *? 加密url

?? dataDic? 要進(jìn)行簽名的字典

?? character? 隨機(jī)16位數(shù)?

*/

+(NSString*)encoingWithDic:(NSMutableDictionary*)dataDic Withcharacter:(NSString*)character

{? ?

? //當(dāng)前時(shí)間戳??

NSDate *datenow = [NSDate date];? ?

NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];?

? [dataDic setObject:timeSp forKey:@"signTime"];? ?

//隨機(jī)16位數(shù)? ?

//NSString *randomStr = [NSString generateFradomCharacter];?

? [dataDic setObject:character forKey:@"signStr"];? ?

/*請(qǐng)求參數(shù)按照參數(shù)名ASCII碼從小到大排序*/? ?

NSArray *keys = [dataDic allKeys];? ?

//按字母順序排序? ?

NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)

{? ? ? ? return [obj1 compare:obj2 options:NSNumericSearch];?

? }];? ?

NSString *returnStr = @"";??

//拼接字符串? ?

for (int i=0;i<sortedArray.count;i++){

NSString *category = sortedArray[i];

if (i==0) {

returnStr =[NSString stringWithFormat:@"%@=%@",category,dataDic[category]];}else{

returnStr = [NSString stringWithFormat:@"%@&%@=%@",returnStr,category,dataDic[category]];}

???? }

/*拼接上key得到stringSignTemp*/

returnStr = [NSString stringWithFormat:@"%@&key=%@",returnStr,urlKey];

/*md5加密*/

returnStr = [self bigmd5:returnStr];

}

//md5 32位加密 (大寫(xiě))

+(NSString *)bigmd5:(NSString *)str {

const char *cStr = [str UTF8String];

unsigned char result[16];

CC_MD5( cStr, strlen(cStr), result );

return [NSString stringWithFormat:

@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

result[0], result[1], result[2], result[3],

result[4], result[5], result[6], result[7],

result[8], result[9], result[10], result[11],

result[12], result[13], result[14], result[15]

];

}

//md5 32位 加密 (小寫(xiě))

+ (NSString *)md5:(NSString *)str {

const char *cStr = [str UTF8String];

unsigned char result[32];

CC_MD5( cStr, strlen(cStr), result );

return [NSString stringWithFormat:

@"xxxxxxxxxxxxxxxx",

result[0],result[1],result[2],result[3],

result[4],result[5],result[6],result[7],

result[8],result[9],result[10],result[11],

result[12],result[13],result[14],result[15],

result[16], result[17],result[18], result[19],

result[20], result[21],result[22], result[23],

result[24], result[25],result[26], result[27],

result[28], result[29],result[30], result[31]];

}

//產(chǎn)生16位隨機(jī)數(shù)

+ (NSString *)generateFradomCharacter

{

static int kNumber = 16;

NSString *sourceStr = @"abcdefghijklmnopqrstuvwxyz0123456789";

NSMutableString *resultStr = [[NSMutableString alloc] init];

for (int i = 0; i < kNumber; i++)

{

unsigned index =? arc4random() % [sourceStr length];

NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];

[resultStr appendString:oneStr];

}

return resultStr;

}

希望對(duì)大家有用!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.AES加解密,給NSData添加類別 NSData+AES 添加頭文件#import - (NSData *)...
    念念不忘的閱讀 1,953評(píng)論 0 3
  • 首先羅列一些知識(shí)點(diǎn): 1.加密算法通常分為對(duì)稱性加密算法和非對(duì)稱性加密算法:對(duì)于對(duì)稱性加密算法,信息接收雙方都需事...
    JonesCxy閱讀 1,547評(píng)論 2 4
  • 我真的是一個(gè)比較容易掉鏈子的人,因?yàn)槲依哿司蜁?huì)歇幾天,我困了就會(huì)早早睡,懶癌又犯了對(duì)不?還好今早就能夠意識(shí)...
    胡敏宜閱讀 387評(píng)論 0 0
  • 人生幾十年,從沒(méi)像今年這樣,自己的星座被黑得這么慘。居然有人對(duì)我說(shuō),將來(lái)得告訴兒子,找老婆千萬(wàn)不能是水瓶座。 我擦...
    花咯閱讀 732評(píng)論 1 0

友情鏈接更多精彩內(nèi)容