MD5加密/加鹽/時間戳密碼/base64


一.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);

    }];

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM