MD5
什么是MD5
全稱是Message Digest Algorithm 5,譯為“消息摘要算法第5版”
效果:對(duì)輸入信息生成唯一的128位散列值(32個(gè)字符)
MD5的特點(diǎn)
輸入兩個(gè)不同的明文不會(huì)得到相同的輸出值
根據(jù)輸出值,不能得到原始的明文,即其過(guò)程不可逆
MD5的應(yīng)用
由于MD5加密算法具有較好的安全性蒲肋,而且免費(fèi),因此該加密算法被廣泛使用
主要運(yùn)用在數(shù)字簽名、文件完整性驗(yàn)證以及口令加密等方面
MD5解密網(wǎng)站:http://www.cmd5.com
MD5改進(jìn)
現(xiàn)在的MD5已不再是絕對(duì)安全,對(duì)此扰肌,可以對(duì)MD5稍作改進(jìn),以增加解密的難度
加鹽(Salt):在明文的固定位置插入隨機(jī)串熊杨,然后再進(jìn)行MD5
先加密曙旭,后亂序:先對(duì)明文進(jìn)行MD5,然后對(duì)加密得到的MD5串的字符進(jìn)行亂序
總之宗旨就是:黑客就算攻破了數(shù)據(jù)庫(kù)晶府,也無(wú)法解密出正確的明文
上面的情況會(huì)造成以下問(wèn)題
用戶流量的浪費(fèi)
程序響應(yīng)速度不夠快
思考:如何解決夷狰?
緩存的實(shí)現(xiàn)
一般只對(duì)GET請(qǐng)求進(jìn)行緩存,不必對(duì)POST請(qǐng)求進(jìn)行緩存
GET請(qǐng)求一般用來(lái)查詢數(shù)據(jù)
POST請(qǐng)求一般是發(fā)大量數(shù)據(jù)給服務(wù)器處理(變動(dòng)性比較大)
在iOS中郊霎,可以使用NSURLCache類緩存數(shù)據(jù)
iOS 5之前:只支持 內(nèi)存緩存
iOS 5開(kāi)始:同時(shí)支持 內(nèi)存緩存和 硬盤緩存
NSURLCache了解
緩存原理:一個(gè)NSURLRequest對(duì)應(yīng)一個(gè)NSCachedURLResponse
緩存技術(shù):數(shù)據(jù)庫(kù)
NSURLCache
NSURLCache的常見(jiàn)用法
獲得全局緩存對(duì)象(沒(méi)必要手動(dòng)創(chuàng)建)
NSURLCache *cache = [NSURLCache sharedURLCache];
設(shè)置內(nèi)存緩存的最大容量(字節(jié)為單位,默認(rèn)為512KB)
-(void)setMemoryCapacity:(NSUInteger)memoryCapacity;
設(shè)置硬盤緩存的最大容量(字節(jié)為單位爷绘,默認(rèn)為10M)
-(void)setDiskCapacity:(NSUInteger)diskCapacity;
硬盤緩存的位置:沙盒/Library/Caches
取得某個(gè)請(qǐng)求的緩存
-(NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest
*)request;
清除某個(gè)請(qǐng)求的緩存
-(void)removeCachedResponseForRequest:(NSURLRequest *)request;
清除所有的緩存
- (void)removeAllCachedResponses;
緩存GET請(qǐng)求
要想對(duì)某個(gè)GET請(qǐng)求進(jìn)行數(shù)據(jù)緩存书劝,非常簡(jiǎn)單
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
設(shè)置緩存策略
request.cachePolicy= NSURLRequestReturnCacheDataElseLoad;
只要設(shè)置了緩存策略进倍,系統(tǒng)會(huì)自動(dòng)利用NSURLCache進(jìn)行數(shù)據(jù)緩存
緩存策略
iOS對(duì)NSURLRequest提供了7種緩存策略:(實(shí)際上能用的只有3種)
NSURLRequestUseProtocolCachePolicy 默認(rèn)的緩存策略(取決于協(xié)議)
NSURLRequestReloadIgnoringLocalCacheData 忽略緩存,重新請(qǐng)求
NSURLRequestReloadIgnoringLocalAndRemoteCacheData 未實(shí)現(xiàn)
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData 忽略緩存购对,重新請(qǐng)求
NSURLRequestReturnCacheDataElseLoad
有緩存就用緩存猾昆,沒(méi)有緩存就重新請(qǐng)求
NSURLRequestReturnCacheDataDontLoad
有緩存就用緩存,沒(méi)有緩存就不發(fā)請(qǐng)求骡苞,當(dāng)做請(qǐng)求出錯(cuò)處理(用于離線模式)
NSURLRequestReloadRevalidatingCacheData 未實(shí)現(xiàn)
緩存的使用注意
緩存看起來(lái)很美好垂蜗,但需要謹(jǐn)慎使用
如果請(qǐng)求某個(gè)URL的返回?cái)?shù)據(jù)
經(jīng)常更新:不能用緩存!比如股票解幽、彩票數(shù)據(jù)
一成不變:果斷用緩存
偶爾更新:可以定期更改緩存策略 或者 清除緩存
如果大量使用緩存贴见,會(huì)越積越大,建議
定期清除緩存
**********************筆記***********************
1.HTTPS的基本使用
1.https簡(jiǎn)單說(shuō)明
HTTPS(全稱:Hyper
Text Transfer Protocol over Secure Socket Layer)躲株,是以安全為目標(biāo)的HTTP通道片部,簡(jiǎn)單講是HTTP的安全版。
即HTTP下加入SSL層霜定,HTTPS的安全基礎(chǔ)是SSL档悠,因此加密的詳細(xì)內(nèi)容就需要SSL。
它是一個(gè)URI scheme(抽象標(biāo)識(shí)符體系)望浩,句法類同http:體系辖所。用于安全的HTTP數(shù)據(jù)傳輸。
https:URL表明它使用了HTTP磨德,但HTTPS存在不同于HTTP的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在HTTP與TCP之間)缘回。
2.HTTPS和HTTP的區(qū)別主要為以下四點(diǎn):
一、https協(xié)議需要到ca申請(qǐng)證書剖张,一般免費(fèi)證書很少切诀,需要交費(fèi)。
二搔弄、http是超文本傳輸協(xié)議幅虑,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議顾犹。
三倒庵、http和https使用的是完全不同的連接方式,用的端口也不一樣炫刷,前者是80擎宝,后者是443。
四浑玛、http的連接很簡(jiǎn)單绍申,是無(wú)狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議极阅,比http協(xié)議安全胃碾。
2.對(duì)開(kāi)發(fā)的影響。
2.1 如果是自己使用NSURLSession來(lái)封裝網(wǎng)絡(luò)請(qǐng)求筋搏,涉及代碼如下仆百。
- (void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event
{
NSURLSession *session = [NSURLSession
sessionWithConfiguration:[NSURLSessionConfiguration
defaultSessionConfiguration] delegate:self
delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL
URLWithString:@"https://www.apple.com"]
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"%@", [[NSString
alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
[task
resume];
}
只要請(qǐng)求的地址是HTTPS的, 就會(huì)調(diào)用這個(gè)代理方法
我們需要在該方法中告訴系統(tǒng), 是否信任服務(wù)器返回的證書
Challenge: 挑戰(zhàn) 質(zhì)問(wèn)(包含了受保護(hù)的區(qū)域)
protectionSpace : 受保護(hù)區(qū)域
NSURLAuthenticationMethodServerTrust : 證書的類型是 服務(wù)器信任
- (void)URLSession:(NSURLSession *)session
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void
(^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
{
NSLog(@"didReceiveChallenge
%@", challenge.protectionSpace);
NSLog(@"調(diào)用了最外層");
1.判斷服務(wù)器返回的證書類型,
是否是服務(wù)器信任
if
([challenge.protectionSpace.authenticationMethod
isEqualToString:NSURLAuthenticationMethodServerTrust]) {
NSLog(@"調(diào)用了里面這一層是服務(wù)器信任的證書");
NSURLSessionAuthChallengeUseCredential
= 0, 使用證書
NSURLSessionAuthChallengePerformDefaultHandling = 1,
忽略證書(默認(rèn)的處理方式)
NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2, 忽略書證, 并取消這次請(qǐng)求
NSURLSessionAuthChallengeRejectProtectionSpace = 3,
拒絕當(dāng)前這一次, 下一次再詢問(wèn)
NSURLCredential *credential = [NSURLCredential
credentialForTrust:challenge.protectionSpace.serverTrust];
NSURLCredential *card = [[NSURLCredential
alloc]initWithTrust:challenge.protectionSpace.serverTrust];
completionHandler(NSURLSessionAuthChallengeUseCredential , card);
}
}
2.2 如果是使用AFN框架,那么我們不需要做任何額外的操作奔脐,AFN內(nèi)部已經(jīng)做了處理俄周。