讓本身的APP堅如磐石,只須要這幾步

序言php

iOS開發安全問題是不容忽視的,在傳統互聯網領域,安全已然是一個老生常談的話題。業界大佬都不惜重金打造軟件安所有,用於檢測本身產品的安全性。縱使如此,仍時常爆出許多安全問題引起新聞。當今,移動互聯網時代,iOS應用因爲直接運行在用戶的手機上,相比運行在服務器的後臺服務,更有可能被黑客攻擊。大部分的iOS應用都須要連網,經過和服務器端進行通訊,得到最新的信息而且將內容展示給用戶。因爲網絡傳輸過程當中有可能通過不安全的中間節點,因此咱們應該對敏感數據加密,用於保證用戶信息的安全。算法

接下來小編會來淺談一下iOS開發中的幾種加密算法,同時小編也歡迎你們加入小編的iOS交流羣923910776,羣裏會提供相關資料、書籍歡迎你們入駐!數據庫

Base64編碼原理

Base64編碼之因此稱爲Base64,是由於其使用64個字符來對任意數據進行編碼,同理有Base3二、Base16編碼。標準Base64編碼使用的64個字符爲:安全

image

這64個字符是各類字符編碼(好比ASCII編碼)所使用字符的子集,基本,而且可打印。惟一有點特殊的是最後兩個字符,因對最後兩個字符的選擇不一樣,Base64編碼又有不少變種,好比Base64 URL編碼。服務器

Base64編碼本質上是一種將二進制數據轉成文本數據的方案。對於非二進制數據,是先將其轉換成二進制形式,而後每連續6比特(2的6次方=64)計算其十進制值,根據該值在上面的索引表中找到對應的字符,最終獲得一個文本字符串。網絡

Base64的特色:可進行反向解密,Xcode7.0 以後出現的,編碼有個很是顯著的特色,末尾有個 = 號app

將文件進行加密框架

// 獲取須要加密文件的二進制數據NSData*data = [NSDatadataWithContentsOfFile:@"/Users/wangpengfei/Desktop/photo/IMG_5551.jpg"];iphone

// 或 base64EncodedStringWithOptionsNSData*base64Data = [data base64EncodedDataWithOptions:0];異步

// 將加密後的文件存儲到桌面[base64Data writeToFile:@"/Users/wangpengfei/Desktop/123"atomically:YES];

將文件進行解密

// 得到加密後的二進制數據NSData*base64Data = [NSDatadataWithContentsOfFile:@"/Users/wangpengfei/Desktop/123"];

// 解密 base64 數據NSData*baseData = [[NSDataalloc] initWithBase64EncodedData:base64Data options:0];

// 寫入桌面[baseData writeToFile:@"/Users/wangpengfei/Desktop/IMG_5551.jpg"atomically:YES];

利用終端命令進行base64運算:

// 將文件 meinv.jpg 進行 base64運算以後存儲爲 meinv.txtbase64 meinv.jpg -o meinv.txt

// 講meinv.txt 解碼生成 meinv.pngbase64 -D meinv.txt -o meinv.png

// 將字符串 "hello" 進行 base 64 編碼 結果:aGVsbG8=cho "hello" | base64

// 將 base64編碼以後的結果 aGVsbG8= 反編碼爲字符串echoaGVsbG8= | base64 -D

MD5加密--(信息-摘要算法) 哈希算法之一

基本介紹

須要導入第三方框架: NSString+Hash

MD5特色:

壓縮性 : 任意長度的數據,算出的 MD5 值長度都是固定的.

容易計算 : 從原數據計算出 MD5 值很容易.

抗修改性: 對原數據進行任何改動,哪怕只修改一個字節,所獲得的 MD5 值都有很大區別.

弱抗碰撞 : 已知原數據和其 MD5 值,想找到一個具備相同 MD5 值的數據(即僞造數據)是很是困難的.

強抗碰撞: 想找到兩個不一樣數據,使他們具備相同的 MD5 值,是很是困難的

MD5 應用:

一致性驗證:MD5將整個文件當作一個大文本信息,經過不可逆的字符串變換算法,產生一個惟一的MD5信息摘要.就像每一個人都有本身獨一無二的指紋,MD5對任何文件產生一個獨一無二的數字指紋.

利用 MD5 來進行文件校驗,被大量應用在軟件下載站,論壇數據庫,系統文件安全等方面(是否定爲添加木馬,篡改文件內容等).百度‘MD5’第一個網站進去,利用數據庫僞解密,即反查詢

數字簽名;

安全訪問認證

使用方法

利用 MD5 對字符串進行加密

NSString*password =@"WangPengfei";

password = [password md5String];

NSLog(@"password1:%@", password);

加鹽:能夠保證 MD5加密以後更加安全

NSStringsalt =@"234567890-!@#$%^&()_+QWERTYUIOP{ASDFGHJKL:XCVBNM<>";

[password stringByAppendingString:salt];

password = [password md5String];

NSLog(@"password2:%@", password);

每個公司都有本身的「鹽值」,鹽值越複雜,越安全小編也從網上找了一張加密的圖:你們能夠看看

image

時間戳密碼

基本介紹

動態密碼:相同的密碼明文+相同的加密算法-->由於每次登錄時間都不一樣,因此每次計算出的結果也都不相同.能夠充分保證密碼的安全性.

服務器會計算兩個時間值,當期時間和前一分鐘的時間(好比:第59S發送的網絡請求,一秒鐘後服務器收到並做出響應,這時服務器當前時間比客戶端發送時間晚一分鐘,仍然可以判斷準確的值)

使用步驟

獲取MD5 首次加密的密碼

// 1. 當前密碼

NSString*password =@"zhang";

// 2. hmacKey值,是對「WangPengfei」 進行 MD5加密以後的值(動態生成的)

NSString*hmacKey =@"d3bba33b51acaa0a272de7a2f6dfa233";

加密過程

// 1. 第一次加密:第一次 HMAC 運算

password = [password hmacMD5StringWithKey:hmacKey];

// 2.1 得到當前的時間

NSDate*date = [NSDatedate];

// 2.2 得到當前時間的字符串

// 實例化時間格式器NSDateFormatter*formatter = [[NSDateFormatteralloc] init];

// 設置時間格式

formatter.dateFormat =@"yyyy-MM-dd HH:mm";

// 獲取當前時間(要和服務器保持一致)

NSString*dateStr = [formatter stringFromDate:date];

// 3. 將第一次加密後的密碼與當前時間的字符串拼接在一塊兒

password = [password stringByAppendingString:dateStr];

// 4. 進行第二次 HMAC 加密

password = [password hmacMD5StringWithKey:hmacKey];

訪問 loginhmac.php 接口,發送請求

建立請求

NSURL*url = [NSURLURLWithString:@"http://localhost/login/loginhmac.php"];

// POST 要手動設置方法,所以爲可變

NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];

// 設置請求方法

request.HTTPMethod =@"POST";

// 設置請求體內容

NSString*body = [NSStringstringWithFormat:@"username=zhangsan&password=%@", password]; request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];

發送請求

[[[NSURLSessionsharedSession] dataTaskWithRequest:request completionHandler:^(NSData* _Nullable data,NSURLResponse* _Nullable response,NSError* _Nullable error) {

NSLog(@"%@", [[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding]); }] resume];

鑰匙串訪問

基本介紹

蘋果在 iOS 7.0.3版本之後公佈鑰匙串訪問的SDK.鑰匙串訪問接口是純C語言的.

鑰匙串使用 AES 256加密算法,可以保證用戶密碼的安全.

鑰匙串訪問的第三方框架SSKeychain,是對C語言框架的封裝.注意:不須要看源碼.

鑰匙串訪問的密碼保存在哪裏?只有蘋果才知道.這樣進一步保障了用戶的密碼安全.

簡單使用

參數介紹

Password :須要存儲的密碼信息.

Service :用來標識 app ,app的惟一標識符.

account :帳戶信息,當前密碼所對應的帳號.

利用鑰匙串進行加密

image

從鑰匙串加載密碼

image

指紋識別

簡單介紹

指紋識別功能是 iphone 5S以後推出的.SDK是 iOS 8.0 推出!

推出指紋識別功能的目的,是爲了簡化移動支付環節,佔領移動支付市場.

使用步驟

導入框架

image

得到當前系統版本號

image

實例化指紋識別對象,判斷當前設備是否支持指紋識別功能(是否帶有TouchID)

image

指紋登錄(默認是異步方法)

[laCtx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指紋登錄"reply:^(BOOLsuccess,NSError*error) {

// 若是成功,表示指紋輸入正確.

if(success) {

NSLog(@"指紋識別成功!");

}else{

NSLog(@"指紋識別錯誤,請再次嘗試");

}

}];

總結

因爲移動互聯網的快速發展,人們的購物、理財等需求也在移動端出現,使得移動應用的安全性愈來愈重要。因爲部署在用戶終端上,移動應用比服務器應用更容易被攻擊,你們也須要在移動應用的網絡通訊、本地文件和數據、源代碼三方面作好防範,只有這樣才能保證應用安全。

相關文章
相關標籤/搜索