sha-1 加密

引入文件


@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];
   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章