一.MD5加密
{
>1 Security框架
>2 加密方式
NSString *password = @"zhang";
password = [password md5String];
// 單純的 MD5 加密不安全,如果用戶密碼比較簡單,可以通過一些網站查詢到加密結果!
// MD5 "加鹽".
// "鹽值" :越 "咸"越好. 要求足夠復雜! 32 64 128 256 位
// 定義鹽值
NSString *salt = @"!@#$%^&*()QWERTYUIOPMNBVCXZitcast";
// 原始密碼拼接鹽值.
password = [password stringByAppendingString:salt];
// MD5 加密
password = password.md5String;
}
二.時間戳密碼/動態密碼
{
>1 時間戳密碼/動態密碼:
// 用戶的密碼是一定的. 每次發送網絡請求傳遞給服務器的密碼都不同!
// 相同的密碼,相同的加密算法,每次獲得的值不相同.
// 客戶端和服務器的時間是相同的!
>2 實現原理: 客戶端和服務器采用相同的加密方式,以時間為基准進行加密!.
>3 實現細節:
// 1> 客戶端和服務器的時間保持一致:具體加密過程中,要求時間格式也必須一致.
// 2> 時間精度越高,越安全! 多長時間密碼改變一次? 一分鍾!
// 3>
// 客戶端: 發送網絡請求的時候,以"當前"時間做為基准,進行加密. 15:23:59
// 服務器: 服務器接收到網絡請求之后, 服務器以"當前"時間為基准,進行加密. 15:24:03
// 服務器: 繼續以當前時間的前一分鍾為基准,進行數據加密.
// 服務器:判斷動態密碼是否正確的時候:有兩個判斷值:當前時間的和上一分鍾的值.
>4 需要兩次加密, hmacKey 后台提供
// 1. 第一次 hmac 計算(加密):
password = [password hmacMD5StringWithKey:hmacKey];
// 2.1 將第一次加密之后的值與當前時間的字符串拼接.(時間格式要與服務器端一致)
password = [password stringByAppendingString:timer];
// 2.2 第二次 hmac 運算.
password = [password hmacMD5StringWithKey:hmacKey];
}
三.base64Encoding加密解密
{
使用base64Encoding對文件加密解密
// 網絡安全常識:
// 1.對於私密信息,在本地保存,一定不能以明文的形式保存.
// 2.私密信息在網絡中不能以明文的形式傳遞.
// base64加密原則: 6 bit(原8bit) 一個字節. 不足的位數 用0 補齊.兩個0 用一個 = 表示.
// 數據加密之后,數據量會變大,變大 1/3 左右.
// iOS 7.0 之后開放的接口.
1.加密
>1.將要加密的文件轉為二進制數據data
>2.[data base64EncodedDataWithOptions:0] 加密成二進制數據
[data base64EncodedStringWithOptions:0] 加密成字符串數據
>3.寫入文件
2.解密
>1.將要解密的文件轉為二進制數據
[str dataUsingEncoding:NSUTF8StringEncoding] //是字符串
>2.[[NSData alloc] initWithBase64EncodedData:data options:0];
[[NSData alloc] initWithBase64EncodedString:…]
>3.寫入文件
}
四.鑰匙串存儲--SSKeychain 第三方框架
{
>1 鑰匙串保存密碼:
// 可以在鑰匙串中直接保存密碼明文!
>2 鑰匙串使用--存儲
NSString *password = @"zhang";
// 將密碼保存在鑰匙串中.
// 取出應用程序的唯一標識符.
NSString *bundleID = [NSBundle mainBundle].bundleIdentifier;
// Service :用來標識應用程序的!
// account :用來標識賬號信息. 密碼對應的賬號.
[SSKeychain setPassword:password forService:bundleID account:kUserNameKey];
>3 鑰匙串密碼--讀取:
// 根據應用程序的 唯一標識符 取出鑰匙串中保存的密碼:
NSString *password = [SSKeychain passwordForService:bundleID account:kUserNameKey];
>4 利用鑰匙串保存密碼的優點:
// 1. 安全!
// 2. 鑰匙串有自己獨特的存儲位置,並不存在於每一個沙盒中.當用戶刪除應用程序之后,鑰匙串中存儲的密碼信息不會被刪除!
}
五.cookie
{
>1 cookie: 網絡信息塊.用來存儲信息的!
// cookie會自動登錄!會將 cookie 中存儲的信息自動發送給服務器.
>2 查看 cookie 中的信息.
// NSHTTPCookieStorage :這個類中/對象存儲了所有的 cookie 信息.
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
// 取出 storage 中保存的 cookie 信息.
[storage.cookies enumerateObjectsUsingBlock:^(NSHTTPCookie * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSHTTPCookie *cookie = obj;
NSLog(@"cookie:%@",cookie);
}];
}
