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
如果相同,那么就可以确认,请求是由可以信任的客户端发起的,认证过程由此也完成了。
网友评论