轉(zhuǎn)載 https://blog.csdn.net/qq_30513483/article/details/60143441
寫在前面
在寫項目中,數(shù)據(jù)的安全性至關(guān)重要嚼松,而僅僅用 POST 請求提交用戶的隱私數(shù)據(jù),還是不能完全解決安全問題徘钥。因此:我們經(jīng)常會用到加密技術(shù)蝎困,比如說在登錄的時候,我們會先把密碼用MD5加密再傳輸給服務(wù)器 或者 直接對所有的參數(shù)進(jìn)行加密再POST到服務(wù)器魂迄。
記得最初接觸加密,也不懂惋耙,就根據(jù)文檔捣炬,用的是 md5,直接調(diào)一方法就OK 了(感覺加密也簡單的)-->淡淡的一笑绽榛!
相信很多開發(fā)者跟我當(dāng)初一樣湿酸,只是根據(jù)項目經(jīng)理或者文檔指示進(jìn)行加密,簡單會使用 但并不知道加密知識體系和內(nèi)在原理灭美,于是整理了一份相關(guān)資料推溃。時間有限,知識并未全覆蓋届腐,有遺漏或者錯誤铁坎,忘指正蜂奸。
目錄:
- 數(shù)據(jù)安全介紹
- 常用加密算法
- 常用加密方式
- Base64編碼方案
- 加密實現(xiàn)代碼
5.1 MD5加密算法
5.2 對稱加密算法AES和DES
5.3 非對稱加密RSA- HTTPS基本使用
- 數(shù)據(jù)安全–加密解密效果
加密實戰(zhàn)應(yīng)用場景(持續(xù)更新)
1.數(shù)據(jù)安全介紹
-
最基礎(chǔ)的是我們發(fā)送網(wǎng)絡(luò)請求時,使用
get
和post
方式發(fā)送請求硬萍。兩者具體區(qū)別就不做解釋了扩所,只是引出相關(guān)安全性問題-
get
:將參數(shù)暴露在外,(絕對不安全-->明文請求或者傻瓜式請求)朴乖。 -
post
:將參數(shù)放到請求體body中祖屏,(相對于get比較安全-->但是我們可以很容易用一些軟件截獲請求數(shù)據(jù)。比如說Charles(青花瓷)
)
-
-
Charles
(大部分app的數(shù)據(jù)來源都使用該工具來抓包买羞,并做網(wǎng)絡(luò)測試) -
數(shù)據(jù)安全的原則
- 在網(wǎng)絡(luò)上
不允許
傳輸用戶隱私數(shù)據(jù)的明文
,(即:App網(wǎng)絡(luò)傳輸安全儒鹿,指對數(shù)據(jù)從客戶端傳輸?shù)絊erver中間過程的加密化撕,防止網(wǎng)絡(luò)世界當(dāng)中其他節(jié)點對數(shù)據(jù)的竊聽)。 - 在本地
不允許
保存用戶隱私數(shù)據(jù)的明文
,(即:App數(shù)據(jù)存儲安全约炎,主要指在磁盤做數(shù)據(jù)持久化的時候所做的加密)植阴。 - App
代碼安全
,(即:包括代碼混淆,加密或者app加殼)圾浅。
- 在網(wǎng)絡(luò)上
要想非常安全的傳輸數(shù)據(jù)掠手,建議使用https。抓包不可以狸捕,但是中間人攻擊則有可能喷鸽。建議雙向驗證防止中間人攻擊,可以參考下文篇章灸拍。
2.常用加密算法
常用加密算法 | 名稱 |
---|---|
編碼方案 | Base64 |
哈希(散列)函數(shù) | MD5(消息摘要算法) |
SHA1 | |
SHA256 | |
對稱加密算法 | DES |
AES | |
非對稱加密算法 | RSA |
HTTPS | HTTP+SSL協(xié)議 |
3.常用加密方式
常用加密方式 |
---|
1.通過簡單 BASE64編碼 防止數(shù)據(jù)明文傳輸 |
2.對普通請求做祝、返回數(shù)據(jù),生成MD5校驗(MD5中加入動態(tài)密鑰)鸡岗,進(jìn)行數(shù)據(jù)完整性(簡單防篡改混槐,安全性較低,優(yōu)點:快速)校驗 |
3.對于重要數(shù)據(jù)轩性,使用RSA進(jìn)行數(shù)字簽名声登,起到防篡改作 |
4.對于比較敏感的數(shù)據(jù),如用戶信息(登陸、注冊等)捌刮,客戶端發(fā)送使用RSA加密,服務(wù)器返回使用DES(AES)加密 |
5.要想非常安全的傳輸數(shù)據(jù)舒岸,建議使用https绅作。抓包不可以,但是中間人攻擊則有可能蛾派。建議雙向驗證防止中間人攻擊 |
4.Base64編碼方案
Base64簡單說明
描述:Base64可以成為密碼學(xué)的基石俄认,非常重要。
特點:可以將任意的二進(jìn)制數(shù)據(jù)進(jìn)行Base64編碼
結(jié)果:所有的數(shù)據(jù)都能被編碼為并只用65個字符(A~Z a~z 0~9 + / =)就能表示的文本文件洪乍。
注意:對文件進(jìn)行base64編碼后文件數(shù)據(jù)的變化:編碼后的數(shù)據(jù)~=編碼前數(shù)據(jù)的4/3眯杏,會大1/3左右。Base64編碼原理和處理過程
Base64編碼原理 |
---|
1壳澳、將所有字符轉(zhuǎn)化為ASCII碼 |
2岂贩、將ASCII碼轉(zhuǎn)化為8位二進(jìn)制 |
3、將二進(jìn)制3個歸成一組(不足3個在后邊補(bǔ)0)共24位巷波,再拆分成4組萎津,每組6位 |
4、統(tǒng)一在6位二進(jìn)制前補(bǔ)兩個0湊足8位 |
5抹镊、將補(bǔ)0后的二進(jìn)制轉(zhuǎn)為十進(jìn)制 |
6锉屈、從Base64編碼表獲取十進(jìn)制對應(yīng)的Base64編碼 |
Base64處理過程 |
1、轉(zhuǎn)換的時候垮耳,將三個byte的數(shù)據(jù)颈渊,先后放入一個24bit的緩沖區(qū)中,先來的byte占高位终佛。 |
2俊嗽、數(shù)據(jù)不足3byte的話,于緩沖區(qū)中剩下的bit用0補(bǔ)足铃彰。然后乌询,每次取出6個bit,按照其值選擇查表選擇對應(yīng)的字符作為編碼后的輸出豌研。 |
3妹田、不斷進(jìn)行,直到全部輸入數(shù)據(jù)轉(zhuǎn)換完成鹃共。 |
4鬼佣、如果最后剩下兩個輸入數(shù)據(jù),在編碼結(jié)果后加1個“=”霜浴; |
5晶衷、如果最后剩下一個輸入數(shù)據(jù),編碼結(jié)果后加2個“=”; |
6晌纫、如果沒有剩下任何數(shù)據(jù)税迷,就什么都不要加,這樣才可以保證資料還原的正確性锹漱。 |
在這里提供幾張圖結(jié)合上面的處理過程箭养,好理解。
- Base64實現(xiàn)代碼
簡單方法直接拿走哥牍,調(diào)用
// 對一個字符串進(jìn)行base64編碼,并且返回-(NSString *)base64EncodeString:(NSString *)string { // 1.先轉(zhuǎn)換為二進(jìn)制數(shù)據(jù) NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; // 2.對二進(jìn)制數(shù)據(jù)進(jìn)行base64編碼,完成之后返回字符串 return [data base64EncodedStringWithOptions:0];} // 對base64編碼之后的字符串解碼,并且返回-(NSString *)base64DecodeString:(NSString *)string { // 注意:該字符串是base64編碼后的字符串 // 1.轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(完成了解碼的過程) NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0]; // 2.把二進(jìn)制數(shù)據(jù)在轉(zhuǎn)換為字符串 return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];} //---------------------------<#我是分割線#>------------------------------// NSLog(@"%@",[self base64EncodeString:@"A"]);NSLog(@"%@",[self base64DecodeString:@"QQ=="]);
PS.終端執(zhí)行編碼和解碼
如:編碼:base64 123.png -o 123.txt解碼:base64 123.txt -o test.png -D
4.加密實現(xiàn)代碼
哈希(散列)函數(shù)
特點:
- 算法是公開的
- 對相同的數(shù)據(jù)加密毕泌,得到的結(jié)果是一樣的"
- 對不同的數(shù)據(jù)加密,得到的結(jié)果是定長的嗅辣,MD5對不同的數(shù)據(jù)進(jìn)行加密撼泛,得到的結(jié)果都是 32 個字符長度的字符串
- 信息摘要,信息"指紋"澡谭,是用來做數(shù)據(jù)識別的愿题!
- 不能逆推反算(重要)
用途:
- 版權(quán) 對文件進(jìn)行散列判斷該文件是否是正版或原版的
- 文件完整性驗證 對整個文件進(jìn)行散列,比較散列值判斷文件是否完整或被篡改
- 密碼加密蛙奖,服務(wù)器并不需要知道用戶真實的密碼抠忘!
- 搜索:
如:百度搜索-->老司機(jī) 皮皮蝦 蒼老師
或是 【蒼老師 老司機(jī) 皮皮蝦 】
上面兩種方式搜索出來的內(nèi)容是一樣的- 如何判斷:對搜索的每個關(guān)鍵字進(jìn)行三列,得到三個相對應(yīng)的結(jié)果外永,按位相加結(jié)果如果是一樣的崎脉,那搜索的內(nèi)容就是一樣的!
- 經(jīng)典加密算法:
MD5伯顶、SHA1囚灼、SHA512
MD5消息摘要算法
-
簡單介紹:
- MD5:全稱是Message Digest Algorithm 5,譯為“消息摘要算法第5版”(經(jīng)MD2祭衩、MD3和MD4發(fā)展而來)
- 效果:對輸入信息生成唯一的128位散列值(32個字符)灶体,即 32個16進(jìn)制的數(shù)字。
-
特點:
- 輸入兩個不同的明文不會得到相同的輸出值
- 根據(jù)輸出值掐暮,不能得到原始的明文蝎抽,即其過程不可逆(只能加密, 不能解密)
-
應(yīng)用:
- 現(xiàn)在的MD5已不再是絕對安全(如:暴力破解的網(wǎng)站),對此路克,可以對MD5稍作改進(jìn)樟结,以增加解密的難度。
- 解決:加鹽(Salt):在明文的固定位置插入隨機(jī)串精算,然后再進(jìn)行MD5(先加密瓢宦,后亂序:先對明文進(jìn)行MD5,然后對加密得到的MD5串的字符進(jìn)行亂序)
-
注意點:
- 開發(fā)中灰羽,一定要和后臺開發(fā)人員約定好驮履,MD5加密的位數(shù)是16位還是32位(大多數(shù)都是32位的)鱼辙,16位的可以通過32位的轉(zhuǎn)換得到。
- MD5加密區(qū)分 大小寫玫镐,使用時要和后臺約定好倒戏。
- MD5公認(rèn)被破解不代表其可逆,而是一段字符串加密后的密文恐似,可以通過強(qiáng)大運(yùn)算計算出字符串加密后的密文對應(yīng)的原始字符串杜跷,但也不是絕對的被破解。
PS.暴力破解是指通過將明文和生成的密文進(jìn)行配對蹂喻,生成強(qiáng)大的數(shù)據(jù)庫,在數(shù)據(jù)庫中搜索捂寿,在這里就可以破解密碼口四。破解網(wǎng)址 http://www.cmd5.com
提升MD5加密安全性,解決辦法
1.先明文加鹽秦陋,然后再進(jìn)行MD5蔓彩。即明文后拼接字符串(此時拼接的字符串要 足夠長+足夠咸+足夠復(fù)雜),再進(jìn)行MD5加密驳概。如:
#define salt @"1342*&%&shlfhs390(*^^6R%@@KFGKF"
2.先加密+亂序
3.亂序|加鹽赤嚼,多次MD5加密等
4.使用消息認(rèn)證機(jī)制HMAC:給定一個"秘鑰",對明文進(jìn)行加密顺又,并且做"兩次散列"更卒!-> 得到的結(jié)果,還是 32 個字符稚照,相對安全(KEY是服務(wù)器傳給你的蹂空,不是你寫死的)。
消息認(rèn)證機(jī)制(HMAC)簡單說明
- 原理
- 消息的發(fā)送者和接收者有一個共享密鑰
- 發(fā)送者使用共享密鑰對消息加密計算得到MAC值(消息認(rèn)證碼)
- 消息接收者使用共享密鑰對消息加密計算得到MAC值
- 比較兩個MAC值是否一致
- 使用
- 客戶端需要在發(fā)送的時候把(消息)+(消息·HMAC)一起發(fā)送給服務(wù)器
- 服務(wù)器接收到數(shù)據(jù)后果录,對拿到的消息用共享的KEY進(jìn)行HMAC上枕,比較是否一致,如果一致則信任
簡單示例
#pragma mark - md5加密方法- (NSString *)md5String { const char *str = self.UTF8String; uint8_t buffer[CC_MD5_DIGEST_LENGTH]; CC_MD5(str, (CC_LONG)strlen(str), buffer); return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];} #pragma mark - HMACMD5加密方法- (NSString *)hmacMD5StringWithKey:(NSString *)key { const char *keyData = key.UTF8String; const char *strData = self.UTF8String; uint8_t buffer[CC_MD5_DIGEST_LENGTH]; CCHmac(kCCHmacAlgMD5, keyData, strlen(keyData), strData, strlen(strData), buffer); return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];} /** * 返回二進(jìn)制 Bytes 流的字符串表示形式 * @param bytes 二進(jìn)制 Bytes 數(shù)組 * @param length 數(shù)組長度 * @return 字符串表示形式 */- (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length { NSMutableString *strM = [NSMutableString string]; for (int i = 0; i < length; i++) { [strM appendFormat:@"%02x", bytes[i]]; } return [strM copy];} //---------------------------<#我是分割線#>------------------------------// // md5加密調(diào)用NSLog(@"%@",[@"520it" md5String]); // (明文+加鹽)MD5加密調(diào)用NSLog(@"%@",[[@"520it" stringByAppendingString:salt] md5String]); // hmacMD5加密調(diào)用(先加密+亂序)NSLog(@"%@",[@"520it" hmacMD5StringWithKey:@"xiaomage"]);
對稱加密算法AES和DES
- 對稱加密的特點
- 加密/解密使用相同的密鑰
- 加密和解密的過程是可逆的
- 經(jīng)典算法
- DES 數(shù)據(jù)加密標(biāo)準(zhǔn)
- AES 高級加密標(biāo)準(zhǔn)
- 提示:
- 加密過程是先加密弱恒,再base64編碼
- 解密過程是先base64解碼辨萍,再解密
簡單示例
/** * 加密字符串并返回base64編碼字符串 * * @param string 要加密的字符串 * @param keyString 加密密鑰 * @param iv 初始化向量(8個字節(jié)) * * @return 返回加密后的base64編碼字符串 */- (NSString *)encryptString:(NSString *)string keyString:(NSString *)keyString iv:(NSData *)iv;/** * 解密字符串 * * @param string 加密并base64編碼后的字符串 * @param keyString 解密密鑰 * @param iv 初始化向量(8個字節(jié)) * * @return 返回解密后的字符串 */- (NSString *)decryptString:(NSString *)string keyString:(NSString *)keyString iv:(NSData *)iv;// 調(diào)用EncryptionTools *encrypt = [EncryptionTools sharedEncryptionTools];NSLog(@"%@",[encrypt encryptString:@"LN123" keyString:@"LN" iv:nil]);NSLog(@"%@",[encrypt decryptString:@"OPcTMDB5paivqtYo9Fj+hQ==" keyString:@"LN" iv:nil]);
非對稱加密RSA
- 非對稱加密的特點
- 使用 公鑰 加密,使用 私鑰 解密
- 使用 私鑰 加密返弹,使用 公鑰 解密(私鑰簽名锈玉,公鑰驗簽)
- 公鑰是公開的,私鑰保密
- 加密處理安全义起,但是性能極差
- 經(jīng)典算法-->RSA
簡單示例
// 公鑰加密時調(diào)用類方法:+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;// 私鑰解密時調(diào)用類方法+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privacy; /** 調(diào)用 */NSString *str = [RSAUtil encryptString: @"LN" publicKey:RSA_Public_key];NSLog(@"RSA公鑰加密數(shù)據(jù)-->\n%@",str); NSString *str1 = [RSAUtil decryptString:str privateKey:RSA_Privite_key];NSLog(@"RSA私鑰解密數(shù)據(jù)-->%@",str1);
MAC上生成公鑰嘲玫、私鑰的方法,及使用
# MAC上生成公鑰并扇、私鑰的方法 @code 1.打開終端去团,切換到自己想輸出的文件夾下 2.輸入指令:openssl(openssl是生成各種秘鑰的工具,mac已經(jīng)嵌入) 3.輸入指令:genrsa -out rsa_private_key.pem 1024 (生成私鑰,java端使用的) 4.輸入指令:rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout (生成公鑰) 5.輸入指令:pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt(私鑰轉(zhuǎn)格式土陪,在ios端使用私鑰解密時用這個私鑰) 注意:在MAC上生成三個.pem格式的文件昼汗,一個公鑰,兩個私鑰鬼雀,都可以在終端通過指令vim xxx.pem 打開顷窒,里面是字符串,第三步生成的私鑰是java端用來解密數(shù)據(jù)的源哩,第五步轉(zhuǎn)換格式的私鑰iOS端可以用來調(diào)試公鑰鞋吉、私鑰解密(因為私鑰不留在客戶端) iOS端公鑰加密私鑰解密、java端公鑰加密私鑰解密励烦,java端私鑰加密公鑰解密都容易做到谓着,iOS不能私鑰加密公鑰解密,只能用于驗簽 @endcode
5.HTTPS基本使用
-
https簡單說明
- HTTPS(
全稱:Hyper Text Transfer Protocol over Secure Socket Layer
)坛掠,是以安全為目標(biāo)的HTTP通道赊锚,簡單講是HTTP的安全版。 - 在HTTP下加入
SSL層
屉栓,HTTPS的安全基礎(chǔ)是SSL舷蒲,因此加密的詳細(xì)內(nèi)容就需要SSL。 它是一個URI scheme(抽象標(biāo)識符體系)友多,句法類同http:體系牲平。用于安全的HTTP數(shù)據(jù)傳輸。 - HTTPS:URL表明它使用了HTTP域滥,但HTTPS存在不同于HTTP的默認(rèn)端口及一個加密/身份驗證層(在HTTP與TCP之間)欠拾。
- HTTPS(
-
注意
- HTTPS的主要思想是在不安全的網(wǎng)絡(luò)上創(chuàng)建一安全信道,并可在使用適當(dāng)?shù)募用馨头?wù)器證書可被驗證且可被信任時骗绕,對竊聽和中間人攻擊提供合理的保護(hù)藐窄。
- HTTPS的信任繼承基于預(yù)先安裝在瀏覽器中的證書頒發(fā)機(jī)構(gòu)(如VeriSign、Microsoft等)(意即“我信任證書頒發(fā)機(jī)構(gòu)告訴我應(yīng)該信任的”)酬土。
- 因此荆忍,一個到某網(wǎng)站的HTTPS連接可被信任,如果服務(wù)器搭建自己的https 也就是說采用自認(rèn)證的方式來建立https信道撤缴,這樣一般在客戶端是不被信任的刹枉。
- 所以我們一般在瀏覽器訪問一些https站點的時候會有一個提示,問你是否繼續(xù)屈呕。
-
HTTPS和HTTP區(qū)別
- https協(xié)議需要到
ca申請證書
微宝,一般免費(fèi)證書很少,需要交費(fèi)虎眨。 - http是超文本傳輸協(xié)議蟋软,信息是明文傳輸镶摘,https 則是具有安全性的
ssl加密傳輸協(xié)議
。 - http和https使用的是完全不同的連接方式岳守,用的端口也不一樣凄敢,
前者是80
,后者是443
湿痢。 - http的連接很簡單涝缝,是無狀態(tài)的;HTTPS協(xié)議是由
SSL+HTTP協(xié)議
構(gòu)建的可進(jìn)行加密傳輸譬重、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議拒逮,比http協(xié)議安全。
- https協(xié)議需要到
實現(xiàn)代碼
方案一:如果是自己使用NSURLSession來封裝網(wǎng)絡(luò)請求
// 1.創(chuàng)建sessionNSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];// 2.創(chuàng)建TaskNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://kyfw.12306.cn/otn"]] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 3.解析數(shù)據(jù) NSLog(@"%@---%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],error);}];// 4.執(zhí)行task[dataTask resume]; #pragma mark - 遵守<NSURLSessionDataDelegate>// 如果發(fā)送的請求是https的,那么才會調(diào)用該方法-(void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler { /** 判斷服務(wù)器傳給我們的信任的類型臀规,只有是【服務(wù)器信任的時候滩援,才安裝證書】 NSURLSessionAuthChallengeDisposition 如何處理證書 NSURLAuthenticationMethodServerTrust 服務(wù)器信任 */ if(![challenge.protectionSpace.authenticationMethod isEqualToString:@"NSURLAuthenticationMethodServerTrust"]) { return; } NSLog(@"%@",challenge.protectionSpace); /* NSURLCredential 授權(quán)信息 NSURLSessionAuthChallengeUseCredential = 0, 使用該證書 安裝該證書 NSURLSessionAuthChallengePerformDefaultHandling = 1, 默認(rèn)采用的方式,該證書被忽略 NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2, 取消請求,證書忽略 NSURLSessionAuthChallengeRejectProtectionSpace = 3, 拒絕 */ NSURLCredential *credential = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust]; completionHandler(NSURLSessionAuthChallengeUseCredential,credential); // 注意:并不是所有的https的請求都需要安裝證書(授權(quán))的,請求一些大型的網(wǎng)站有的是強(qiáng)制安裝的以现,如:蘋果官網(wǎng)https://www.apple.com}
方案二:如果使用AFN網(wǎng)絡(luò)請求
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 更改解析方式(請求網(wǎng)頁源碼應(yīng)使用原始解析)manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 設(shè)置對證書的處理方式// 允許自簽名證書狠怨,必須的manager.securityPolicy.allowInvalidCertificates = YES;// 是否驗證域名的CN字段(不是必須的约啊,但是如果寫YES邑遏,則必須導(dǎo)入證書)manager.securityPolicy.validatesDomainName = NO; [manager GET:@"https://kyfw.12306.cn/otn" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"success---%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"error---%@",error);}];
-
補(bǔ)充
ATS(全稱:App Transport Security)
iOS9中新增App Transport Security(簡稱ATS)特性, 讓原來請求時候用到的HTTP,全部都轉(zhuǎn)向TLS1.2協(xié)議進(jìn)行傳輸恰矩。
這意味著所有的HTTP協(xié)議都強(qiáng)制使用了HTTPS協(xié)議進(jìn)行傳輸记盒。
如果我們在iOS9下直接進(jìn)行HTTP請求是會報錯。系統(tǒng)會告訴我們不能直接使用HTTP進(jìn)行請求外傅,需要在Info.plist中控制ATS的配置纪吮。
"NSAppTransportSecurity"是ATS配置的根節(jié)點,配置了節(jié)點表示告訴系統(tǒng)要走自定義的ATS設(shè)置萎胰。
"NSAllowsAritraryLoads"節(jié)點控制是否禁用ATS特性碾盟,設(shè)置YES就是禁用ATS功能;
-
采用解決方法,修改配置信息技竟。
6.數(shù)據(jù)安全--加密解密效果
學(xué)習(xí)本文之外可以參考
網(wǎng)絡(luò)安全——數(shù)據(jù)的加密與簽名,RSA介紹
關(guān)于Https安全性問題冰肴、雙向驗證防止中間人攻擊問題
寫在最后,
曾經(jīng)的曾經(jīng)榔组,
明天的你,一定會感謝今天拼命努力的自己熙尉!
附上一張圖:
時間有限,在這里還有好多地方 實戰(zhàn)應(yīng)用搓扯,沒有總結(jié)寫上检痰,后續(xù)再做補(bǔ)充吧~
附上寫的小樣(Demo)
方法可直接拿走使用,如果你喜歡或有幫助锨推,可否給個 Star
后續(xù)
學(xué)習(xí)總結(jié)-->GitHub(現(xiàn)在代碼少點铅歼,總結(jié)好 待上傳)公壤、白開水ln-簡書
不定時、持續(xù)更新谭贪、一些 學(xué)習(xí)心得與文章境钟、實戰(zhàn)應(yīng)用~
我也是對所花費(fèi)時間的一個總結(jié),「學(xué)習(xí)總結(jié),一勞永逸」俭识。有不足或不對之處慨削,樂聽你的槽點(和??) ~ 關(guān)注菜鳥成長(簡書專題)_. 我會不定時更新一些學(xué)習(xí)心得與文章;