你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發中常用到的加密方式

iOS開發中常用到的加密方式

編輯:IOS開發綜合

1 base64

1.1 簡介

Base64編碼的思想是是采用64個基本的ASCII碼字符對數據進行重新編碼。它將需要編碼的數據拆分成字節數組。以3個字節為一組。按順序排列24位數據,再把這24位數據分成4組,即每組6位。再在每組的的最高位前補兩個0湊足一個字節。這樣就把一個3字節為一組的數據重新編碼成了4個字節。當所要編碼的數據的字節數不是3的整倍數,也就是說在分組時最後一組不夠3個字節。這時在最後一組填充1到2個0字節。並在最後編碼完成後在結尾添加1到2個“=”。例:將對ABC進行BASE64編碼首先取ABC對應的ASCII碼值。A(65)B(66)C(67)。再取二進制值A(01000001)B(01000010)C(01000011),然後把這三個字節的二進制碼接起來(010000010100001001000011),再以6位為單位分成4個數據塊並在最高位填充兩個0後形成4個字節的編碼後的值(00010000)(00010100)(00001001)(00000011)。藍色部分為真實數據。再把這四個字節數據轉化成10進制數得(16)(20)(19)(3)。最後根據BASE64給出的64個基本字符表,查出對應的ASCII碼字符(Q)(U)(J)(D)。這裡的值實際就是數據在字符表中的索引。

 

注:BASE64字符表:包括大寫 A-Z 小寫 a-z 數字 0-9 和+ /

解碼過程就是把4個字節再還原成3個字節再根據不同的數據形式把字節數組重新整理成數據.

1.2 base64的加密原則

base64加密原則: 6 bit(原8bit) 一個字節. 不足的位數 用0 補齊.兩個0 用一個 = 表示.

1.3 加密特點:數據加密之後,數據量會變大,變大 1/3 左右.

1.4 使用步驟

加密:

1> 將要加密的數據轉為二進制的 data

2> [data base64EncodedDataWithOptions:0] 加密成二進制數據

[data base64EncodedStringWithOptions:0] 加密成字符串數據

3> 寫入文件

解密:

1> 將要解密的文件轉為二進制數據

[str dataUsingEncoding:NSUTF8StringEncoding] //是字符串

2> [[NSData alloc] initWithBase64EncodedData:data options:0];

[[NSData alloc] initWithBase64EncodedString:…]

3> 寫入文件

2 MD5

2.1 MD5簡介

MD5的全稱是Message-DigestAlgorithm 5,Message-Digest泛指字節串(Message)的Hash變換,就是把一個任意長度的字節串變換成一定長的大整數。請注意我使用了"字節串"而不是"字符串"這個詞,是因為這種變換只與字節的值有關,與字符集或編碼方式無關。 MD5將任意長度的"字節串"變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。

MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被"篡改"。舉個例子,你將一段話寫在一個叫readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的"抵賴",這就是所謂的數字簽名應用。

MD5還廣泛用於加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的,用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然後再去和系統中保存的MD5值進行比較,而系統並不"知道"用戶的密碼是什麼。

注: MD5加密是不可逆的,也就是說, MD5加密後是不能解密的,所謂的解密只是用大數據的”試用”,來測出結果的.

2.2 加密方式

NSString *password = @"zhang";

password = [password md5String];

注:單純的 MD5加密是不安全的,因此要用到 MD5加鹽的方式

2.3 MD5加鹽

> 鹽值:MD5加鹽的值,加的鹽值越高越好.(鹽值可以隨意添加)

> 試用步驟:

1> 生成鹽值

NSString *salt = @”鹽值”;

2> 拼接鹽值

password = [password stringByAppendingString:salt];

3> 加密

password = password.md5String;

2.3 時間戳/動態密碼

1> 實現目標

用戶的密碼是一定的,但是每次發送給網絡的密碼都不同.相同的密碼相同的加密算法,每次獲得的值不同.客戶端和服務器端的時間是相同的.

2> 原理

客戶端和服務器端依時間為基准采用相同的加密算法

3> 實現細節

客戶端和服務器端要求時間一致

時間精度越高,越安全

客戶端:發送網絡請求的時候依當前時間為基准進行加密.

服務器端:以接收到時間為基准進行加密.還要以接收到的時間的前一分鐘時間為基准進行加密.

服務器端:判斷這兩次的密碼和客戶端發送的密碼是否一致.

4> 實現步驟

 

第一次hmac 加密

password = [password hmacMD5StringWithKey:hmacKey];

將加密後的值和時間進行拼接

password = [password stringByAppendingString:timer];

第二次加密

password = [password hmacMD5StringWithKey:hmacKey];

補充:

DES

DES是Data Encryption Standard(數據加密標准)的縮寫。DES是一個分組加密算法,他以64位為分組對數據加密。同時DES也是一個對稱算法:加密和解密用的是同一個算法。它的密匙長度是56位(因為每個第8位都用作奇偶校驗),密匙可以是任意的56位的數,而且可以任意時候改變。其中有極少量的數被認為是弱密匙,但是很容易避開他們。所以保密性依賴於密鑰。

DES對64(bit)位的明文分組M進行操作,M經過一個初始置換IP置換成m0,將m0明文分成左半部分和右半部分m0=(L0,R0),各32位長。然後進行16輪完全相同的運算,這些運算被稱為函數f,在運算過程中數據與密匙結合。經過16輪後,左,右半部分合在一起經過一個末置換,這樣就完成了。在每一輪中,密匙位移位,然後再從密匙的56位中選出48位。通過一個擴展置換將數據的右半部分擴展成48位,並通過一個異或操作替代成新的32位數據,在將其置換換一次。這四步運算構成了函數f。然後,通過另一個異或運算,函數f的輸出與左半部分結合,其結果成為新的右半部分,原來的右半部分成為新的左半部分。將該操作重復16次,就實現了。

解密過程:在經過所有的代替、置換、異或盒循環之後,你也許認為解密算法與加密算法完全不同。恰恰相反,經過精心選擇的各種操作,獲得了一個非常有用的性質:加密和解密使用相同的算法。DES加密和解密唯一的不同是密匙的次序相反。如果各輪加密密匙分別是K1,K2,K3….K16那麼解密密匙就是K16,K15,K14…K1。

鑰匙串存儲--SSKeychain 第三方框架

> 鑰匙串:可以在鑰匙串中直接寫入明文密碼,鑰匙串比較安全

鑰匙串的存儲

1> 要寫入的密碼

NSString *password = @"zhang";

2> 取出應用的唯一標示符

NSString *bundleID = [NSBundle mainBundle].bundleIdentifier;

3> 寫入

[SSKeychain setPassword:password forService:bundleID account:kUserNameKey]

鑰匙串的讀取:

根據鑰匙串的唯一標示符取出密碼

NSString *password = [SSKeychain passwordForService:bundleID account:kUserNameKey];

Cookie

是一個網絡信息塊,用來存儲信息

cookie 會自動登錄,會將 cookie 中保存的數據自動發給服務器

查看 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);

}];

}

 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved