iOS開發時,為了防止匿名攻擊,服務器需要確保每個請求都是從被信任的客戶端發起的。所以我們在網絡請求時需要對所有請求做一些加密處理,用于server端認證。
這里是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];
//關鍵部分
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
length:sizeof(cHMAC)];
//將加密結果進行一次BASE64編碼。
NSString *hash = [HMAC base64EncodedStringWithOptions:0];
return hash;
}
其中被加密的字段data
,我們可以設定一種特殊的生成方式。
加密的密匙key
也可以和server端商定一致。
這種加密方式依賴于一個庫CommonCryptor.
將加密后的hash
在發送請求時添加到請求的header中,server端通過同樣的加密算法得到的hash
如果相同,那么就可以確認,請求是由可以信任的客戶端發起的,認證過程由此也完成了。