引入文件
@interface SignatrueEncryption : NSObject
//通过SHA-1加密算法,得到用户的合法签名
+ (NSMutableDictionary *)encryptedParamsWithBaseParams:(NSMutableDictionary *)paramsDictionary;
@end
#import "SignatrueEncryption.h"
#import <CommonCrypto/CommonDigest.h>
#import "CommonDefine.h"
@implementation SignatrueEncryption
+ (NSMutableDictionary *)encryptedParamsWithBaseParams:(NSMutableDictionary *)paramsDictionary
{
NSMutableString *signatrueString = [NSMutableString stringWithString:kAPP_KEY];
// NSMutableString *paramsString = [NSMutableString stringWithFormat:@"appkey=%@", kAPP_KEY];
//将参数字典排序
NSArray *sortedParamsDictionaryKeys = [[paramsDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
for (NSString *oneKey in sortedParamsDictionaryKeys) {
[signatrueString appendFormat:@"%@%@", oneKey, [paramsDictionary objectForKey:oneKey]];
}
//将secret串拼接在末尾 747364472category火锅city北京has_coupon1limit20region海淀区sort25257689458624870a3f25fb2f742b37c
[signatrueString appendString:kAPP_SECRET];
[signatrueString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//进行SHA-1加密计算
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
NSData *signatrueBytes = [signatrueString dataUsingEncoding:NSUTF8StringEncoding];
if (CC_SHA1([signatrueBytes bytes], (int)[signatrueBytes length], digest)) {
NSMutableString *digestedString = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH];
for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
unsigned char signleCharacter = digest[i];
//转成16进制的字符串,注意格式%02X,X 表示以十六进制形式输出 02 表示不足两位,前面补0输出
[digestedString appendFormat:@"%02X", signleCharacter];
}
//045018701D3E341C38C4BC703495C1F031594FBB
NSMutableDictionary *newParamsDictionary = [NSMutableDictionary dictionaryWithDictionary:paramsDictionary];
[newParamsDictionary setObject:digestedString forKey:@"sign"];
return newParamsDictionary;
} else {
return nil;
}
}
@end
使用:
// 创建字典加密
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:keyStr,@"cats", nil];
NSDictionary *encodeDict = [SignatrueEncryption encryptedParamsWithBaseParams:dict];
// xCode7淘汰(只对 `#%^{}[]|\"<> 加空格共14个字符编码,不包括”&?”等符号), ios9将淘汰)
// NSString *catType = [encodeDict[@"cats"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 建议使用的方法
NSString *catType = [encodeDict[@"cats"] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
// 搜索时用这个URL
NSString *urlString = [NSString stringWithFormat:@"http://3fggh.ibhai.com/ret/v3/vities?&page_size=20&cur_page=%ld&sort=0&keywords=%@&device_type=2&app_version=4.4.0&is_recent=0&api_version=1&city=%ld",(long)currentPage,catType,(long)_currentCityID];