MD5
什么是MD5
全稱是Message
Digest Algorithm 5,譯為“消息摘要算法第5版”
效果:對輸入信息生成唯一的128位散列值(32個字符)
MD5的特點
輸入兩個不同的明文不會得到相同的輸出值
根據(jù)輸出值,不能得到原始的明文脓魏,即其過程不可逆
MD5的應用
由于MD5加密算法具有較好的安全性蓖乘,而且免費沿侈,因此該加密算法被廣泛使用
主要運用在數(shù)字簽名霹娄、文件完整性驗證以及口令加密等方面
MD5解密網站:http://www.cmd5.com
MD5改進
現(xiàn)在的MD5已不再是絕對安全觉啊,對此拣宏,可以對MD5稍作改進,以增加解密的難度
加鹽(Salt):在明文的固定位置插入隨機串杠人,然后再進行MD5
先加密勋乾,后亂序:先對明文進行MD5宋下,然后對加密得到的MD5串的字符進行亂序
… …
總之宗旨就是:黑客就算攻破了數(shù)據(jù)庫,也無法解密出正確的明文
上面的情況會造成以下問題
用戶流量的浪費
程序響應速度不夠快
思考:如何解決辑莫?
緩存的實現(xiàn)
一般只對GET請求進行緩存杨凑,不必對POST請求進行緩存
GET請求一般用來查詢數(shù)據(jù)
POST請求一般是發(fā)大量數(shù)據(jù)給服務器處理(變動性比較大)
在iOS中,可以使用NSURLCache類緩存數(shù)據(jù)
iOS 5之前:只支持內存緩存
iOS 5開始:同時支持內存緩存和硬盤緩存
NSURLCache了解
緩存原理:一個NSURLRequest對應一個NSCachedURLResponse
緩存技術:數(shù)據(jù)庫
NSURLCache
NSURLCache的常見用法
獲得全局緩存對象(沒必要手動創(chuàng)建)
NSURLCache*cache = [NSURLCachesharedURLCache];
設置內存緩存的最大容量(字節(jié)為單位摆昧,默認為512KB)
-(void)setMemoryCapacity:(NSUInteger)memoryCapacity;
設置硬盤緩存的最大容量(字節(jié)為單位撩满,默認為10M)
-(void)setDiskCapacity:(NSUInteger)diskCapacity;
硬盤緩存的位置:沙盒/Library/Caches
取得某個請求的緩存
-(NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request;
清除某個請求的緩存
-(void)removeCachedResponseForRequest:(NSURLRequest*)request;
清除所有的緩存
- (void)removeAllCachedResponses;
緩存GET請求
要想對某個GET請求進行數(shù)據(jù)緩存,非常簡單
NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];
設置緩存策略
request.cachePolicy=NSURLRequestReturnCacheDataElseLoad;
只要設置了緩存策略绅你,系統(tǒng)會自動利用NSURLCache進行數(shù)據(jù)緩存
緩存策略
iOS對NSURLRequest提供了7種緩存策略:(實際上能用的只有3種)
NSURLRequestUseProtocolCachePolicy默認的緩存策略(取決于協(xié)議)
NSURLRequestReloadIgnoringLocalCacheData忽略緩存伺帘,重新請求
NSURLRequestReloadIgnoringLocalAndRemoteCacheData未實現(xiàn)
NSURLRequestReloadIgnoringCacheData =NSURLRequestReloadIgnoringLocalCacheData忽略緩存,重新請求
NSURLRequestReturnCacheDataElseLoad
有緩存就用緩存忌锯,沒有緩存就重新請求
NSURLRequestReturnCacheDataDontLoad
有緩存就用緩存伪嫁,沒有緩存就不發(fā)請求,當做請求出錯處理(用于離線模式)
NSURLRequestReloadRevalidatingCacheData未實現(xiàn)
緩存的使用注意
緩存看起來很美好偶垮,但需要謹慎使用
如果請求某個URL的返回數(shù)據(jù)
經常更新:不能用緩存张咳!比如股票、彩票數(shù)據(jù)
一成不變:果斷用緩存
偶爾更新:可以定期更改緩存策略 或者 清除緩存
如果大量使用緩存似舵,會越積越大脚猾,建議
定期清除緩存
**********************筆記***********************
*************************************************
1.HTTPS的基本使用
1.https簡單說明
HTTPS(全稱:Hyper
Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道砚哗,簡單講是HTTP的安全版龙助。
即HTTP下加入SSL層,HTTPS的安全基礎是SSL蛛芥,因此加密的詳細內容就需要SSL提鸟。
它是一個URI scheme(抽象標識符體系),句法類同http:體系仅淑。用于安全的HTTP數(shù)據(jù)傳輸称勋。
https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)涯竟。
2.HTTPS和HTTP的區(qū)別主要為以下四點:
一赡鲜、https協(xié)議需要到ca申請證書,一般免費證書很少昆禽,需要交費蝗蛙。
二蝇庭、http是超文本傳輸協(xié)議醉鳖,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議哮内。
三盗棵、http和https使用的是完全不同的連接方式壮韭,用的端口也不一樣,前者是80纹因,后者是443喷屋。
四、http的連接很簡單瞭恰,是無狀態(tài)的屯曹;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網絡協(xié)議惊畏,比http協(xié)議安全恶耽。
2.對開發(fā)的影響。
2.1如果是自己使用NSURLSession來封裝網絡請求颜启,涉及代碼如下偷俭。
- (void)touchesBegan:(NSSet *)toucheswithEvent:(UIEvent *)event
{
NSURLSession *session = [NSURLSessionsessionWithConfiguration:[NSURLSessionConfigurationdefaultSessionConfiguration] delegate:selfdelegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *task =? [session dataTaskWithURL:[NSURLURLWithString:@"https://www.apple.com"]completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"%@", [[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
[task
resume];
}
只要請求的地址是HTTPS的,就會調用這個代理方法
我們需要在該方法中告訴系統(tǒng),是否信任服務器返回的證書
Challenge:挑戰(zhàn) 質問(包含了受保護的區(qū)域)
protectionSpace :受保護區(qū)域
NSURLAuthenticationMethodServerTrust :證書的類型是 服務器信任
- (void)URLSession:(NSURLSession *)sessiondidReceiveChallenge:(NSURLAuthenticationChallenge *)challengecompletionHandler:(void(^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
{
NSLog(@"didReceiveChallenge
%@", challenge.protectionSpace);
NSLog(@"調用了最外層");
1.判斷服務器返回的證書類型,是否是服務器信任
if([challenge.protectionSpace.authenticationMethodisEqualToString:NSURLAuthenticationMethodServerTrust]) {
NSLog(@"調用了里面這一層是服務器信任的證書");
NSURLSessionAuthChallengeUseCredential
= 0,使用證書
NSURLSessionAuthChallengePerformDefaultHandling = 1,忽略證書(默認的處理方式)
NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2,忽略書證,并取消這次請求
NSURLSessionAuthChallengeRejectProtectionSpace = 3,拒絕當前這一次,下一次再詢問
NSURLCredential *credential = [NSURLCredentialcredentialForTrust:challenge.protectionSpace.serverTrust];
NSURLCredential *card = [[NSURLCredential
alloc]initWithTrust:challenge.protectionSpace.serverTrust];
completionHandler(NSURLSessionAuthChallengeUseCredential , card);
}
}
2.2如果是使用AFN框架,那么我們不需要做任何額外的操作缰盏,AFN內部已經做了處理涌萤。