iOS開發(fā)時,為了防止匿名攻擊滤灯,服務(wù)器需要確保每個請求都是從被信任的客戶端發(fā)起的坪稽。所以我們在網(wǎng)絡(luò)請求時需要對所有請求做一些加密處理曼玩,用于server端認(rèn)證。
這里是HMac加密方法窒百,代碼如下:
+ (NSString *)HMacHashWithKey:(NSString *)key data:(NSString *)data{
const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
//關(guān)鍵部分
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
length:sizeof(cHMAC)];
//將加密結(jié)果進(jìn)行一次BASE64編碼黍判。
NSString *hash = [HMAC base64EncodedStringWithOptions:0];
return hash;
}
其中被加密的字段data
,我們可以設(shè)定一種特殊的生成方式篙梢。
加密的密匙key
也可以和server端商定一致顷帖。
這種加密方式依賴于一個庫CommonCryptor.
將加密后的hash
在發(fā)送請求時添加到請求的header中,server端通過同樣的加密算法得到的hash
如果相同庭猩,那么就可以確認(rèn)窟她,請求是由可以信任的客戶端發(fā)起的,認(rèn)證過程由此也完成了蔼水。