新的項(xiàng)目里有數(shù)據(jù)信息加密的需求瞎暑,這樣以往的那樣生成param字典直接丟進(jìn)AFNet進(jìn)行請(qǐng)求的方法就不能使用了献烦,對(duì)這個(gè)需求我在網(wǎng)上查閱了一些資料滓窍,都是大概的說了要將param轉(zhuǎn)成jsonString然后對(duì)jsonString進(jìn)行加密,最后轉(zhuǎn)成data丟進(jìn)請(qǐng)求體里提交服務(wù)器巩那。思路大體上是這么個(gè)思路吏夯。
以我的項(xiàng)目里用到的AES加密為例,第一步就是設(shè)置POST的請(qǐng)求
//檢查地址中是否有中文
NSString *urlStr=[NSURL URLWithString:URLString]?URLString:[self strUTF8Encoding:URLString];
NSMutableURLRequest *request =[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlStr]];
[request setHTTPMethod:@"POST"];
//然后在整理設(shè)置param
然后就是將設(shè)置好的param轉(zhuǎn)成jsonString即横,因?yàn)轫?xiàng)目里用到李明杰老師的MJExtension噪生,所以直接就用了這個(gè)庫(kù)的轉(zhuǎn)換方法了,沒有用這個(gè)庫(kù)自己手寫代碼轉(zhuǎn)換也很簡(jiǎn)單
NSString * tmpStr=[param mj_JSONString];
獲取到這個(gè)tmpStr之后就是對(duì)這個(gè)sting做加密操作了东囚,我用的是AES加密跺嗽,自己寫了一個(gè)加密的工具類,外置了-(NSString *) aci_encryptWithAES;方法页藻,返回出去的就是加密后的string桨嫁,這里因?yàn)榧用芩惴ú煌梢宰约鹤远x
//這里就是對(duì)加密方法返回出去的加密string做data轉(zhuǎn)換操作
NSData * data=[str dataUsingEncoding:NSUTF8StringEncoding];
到上一步就獲得了一個(gè)包含加密數(shù)據(jù)的data了
接下來就是對(duì)第一步里的請(qǐng)求做一個(gè)設(shè)置了
// 此處設(shè)置請(qǐng)求體 (即將參數(shù)加密后的字符串,轉(zhuǎn)為data)一般是參數(shù)字典轉(zhuǎn)json字符串,再將json字符串加密,最后將加密后的字符串轉(zhuǎn)為data 設(shè)置為請(qǐng)求體
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
// 設(shè)置body
[request setHTTPBody:data];
這樣把設(shè)置好的request丟進(jìn)AFN里做請(qǐng)求就可以了
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
//這里根據(jù)后臺(tái)的配置來配置
AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer];
responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",
@"text/html",
@"text/json",
@"text/javascript",
@"text/plain",
nil];
manager.responseSerializer = responseSerializer;
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.requestSerializer.timeoutInterval=15;//設(shè)置超時(shí)時(shí)間
//開始網(wǎng)絡(luò)請(qǐng)求
[[manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
//解密
}] resume];
這樣一個(gè)數(shù)據(jù)加密的AFN請(qǐng)求就做完了
=======================
補(bǔ)充個(gè)AES加密工具類