iOS 數據加密(常用加密算法)

【資料整理】

iOS 中的網絡加密

公司的接口一般會兩種協議的,一種HTTP,一種HTTPS的,HTTP 只要請求,服務器就會響應,如果我們不對請求和響應做出加密處理,所有信息都是會被檢測劫持到的,是很不安全的,客戶端加密可以使用我這套工具類進行處理:文章地址

但是不論在任何時候,都應該將服務置于HTTPS上,因為它可以避免中間人攻擊的問題,還自帶了基于非對稱密鑰的加密通道!使用HTTPS后,可以省去各種加解密技術。

介紹下HTTPS交互原理

簡答說,HTTPS 就是 HTTP協議加了一層SSL協議的加密處理,SSL 證書就是遵守 SSL協議,由受信任的數字證書頒發機構CA(如GlobalSign,wosign),在驗證服務器身份后頒發,這是需要花錢滴,簽發后的證書作為公鑰一般放在服務器的根目錄下,便于客戶端請求返回給客戶端,私鑰在服務器的內部中心保存,用于解密公鑰。

HTTPS 客戶端與服務器交互過程:

1、客戶端發送請求,服務器返回公鑰給客戶端;

2、客戶端生成對稱加密秘鑰,用公鑰對其進行加密后,返回給服務器;

3、服務器收到后,利用私鑰解開得到對稱加密秘鑰,保存;

4、之后的交互都使用對稱加密后的數據進行交互。

參考資料:https://www.cnblogs.com/fengmin/p/8178217.html(包含AFN對不信任證書的相關處理)

1 前言:

在提交用戶的隱私數據,例如:登錄密碼、銀行賬號等,不能用明文進行傳輸,很容易被截獲。????

? ? ? ? 1. get請求的所有參數都直接暴露在URL中,可直接看到

????????2. post請求可以利用軟件(如Charles)攔截查看手機的請求數據,使用教程參考Charles抓包

因此:在提交用戶的隱私數據時,一定不要明文提交,要先加密處理后再進行提交。

2 常見加密算法

常用加密算法 ? ? ? ? ? ? ? ? ? ? ?名稱

編碼方式 ? ? ? ? ? ? ? ? ? ? ? ? ? ?Base64 ?Base58

哈希(散列)函數 ? ? ? ? ? ? ? ? MD5(消息摘要算法) ?SHA1 ?SHA256 ?SHA512

對稱加密算法 ? ? ? ? ? ? ? ? ? ?DES ? AES

非對稱加密算法 ? ? ? ? ? ? ? ?RSA(公鑰、私鑰)?ECC

對稱加密可分為:

?????????流加密? 對信息流中每一個元素加密,如12345678, 先對1加密,在對2加密

? ? ? ? ?塊加密? 先對信息分塊。然后對塊加密,如12345678,先1234成塊,5678成塊,然后對塊加密。

2.1 Base64/Base58編碼

? ? ? ? ? ? ? ? 不是加密算法。只是一種編碼方式。通過簡單 BASE64編碼 防止數據明文傳輸

? ? ? ? ? ? ? ? ?Base64是有64個字符組成,大寫A-Z 、小寫a-z,數字0-9,兩個字符 + 和 =

? ??????????????Base58中沒有字母o,沒有數字0,沒有大小寫字母I i,也沒有字符 + ?=.(一般用在比特幣里面的一種編碼方式)

Base64編碼原理和處理過程

Base64編碼原理

?????????????1、將所有字符轉化為ASCII碼

?????????????2、將ASCII碼轉化為8位二進制

?????????????3、將二進制3個歸成一組(不足3個在后邊補0)共24位,再拆分成4組,每組6位

?????????????4、統一在6位二進制前補兩個0湊足8位

?????????????5、將補0后的二進制轉為十進制

?????????????6、從Base64編碼表獲取十進制對應的Base64編碼

Base64處理過程

?????????????1、轉換的時候,將三個byte的數據,先后放入一個24bit的緩沖區中,先來的byte占高位。

?????????????2、數據不足3byte的話,于緩沖區中剩下的bit用0補足。然后,每次取出6個bit,按照其值選擇查表選擇對應的字符作為編碼后的輸出。

?????????????3、不斷進行,直到全部輸入數據轉換完成。

?????????????4、如果最后剩下兩個輸入數據,在編碼結果后加1個“=”;

?????????????5、如果最后剩下一個輸入數據,編碼結果后加2個“=”;

?????????????6、如果沒有剩下任何數據,就什么都不要加,這樣才可以保證資料還原的正確性。????

? 示例:注意 “ ? = ?” 比較特殊。因為base64是三個字節為一組,如果位數不夠時,會使用“=”進行補齊,對文件進行base64編碼后文件數據的變化:編碼后的數據約等于編碼前數據的4/3,會大1/3左右。

? ? ? ? 2.2?哈希(散列)函數 ? ?

哈希(散列)函數

特點:

????算法是公開的

????對相同的數據加密,得到的結果是一樣的"

????對不同的數據加密,得到的結果是定長的,MD5對不同的數據進行加密,得到的結果都是 32 個字符長度的字符串

????信息摘要,信息"指紋",是用來做數據識別的!

????不能逆推反算(重要)

用途:

????版權 對文件進行散列判斷該文件是否是正版或原版的

????文件完整性驗證 對整個文件進行散列,比較散列值判斷文件是否完整或被篡改

????密碼加密,服務器并不需要知道用戶真實的密碼!

? ? ? ? ? ? ? ??MD5消息摘要算法

? ? ? ? ? ? ? ? MD5:全稱是Message Digest Algorithm 5,譯為“消息摘要算法第5版”(經MD2、MD3和MD4發展而來)

? ? ? ? ? ? ? ? 效果:對輸入信息生成唯一的128位散列值(32個字符),即 32個16進制的數字。

? ? ? ? ? ? ·特點:

? ? ? ? ? ? ? ? 輸入兩個不同的明文不會得到相同的輸出值

? ? ? ? ? ? ? ? 根據輸出值,不能得到原始的明文,即其過程不可逆(只能加密, 不能解密)

? ? ? ? ? ? ·應用:

? ? ? ? ? ? ? ? 現在的MD5已不再是絕對安全(如:暴力破解的網站),對此,可以對MD5稍作改進,以增加解密的難度。

? ? ? ? ? ? ? ? 解決:加鹽(Salt):在明文的固定位置插入隨機串,然后再進行MD5(先加密,后亂序:先對明文進行MD5,然后對加密得到的MD5串的字符進行亂序)

? ? ? ? ? ? ·注意點:

? ? ? ? ? ? ? ? 開發中,一定要和后臺開發人員約定好,MD5加密的位數是16位還是32位(大多數都是32位的),16位的可以通過32位的轉換得到。

? ? ? ? ? ? ? ? MD5加密區分 大小寫,使用時要和后臺約定好。

? ? ? ? ? ? ? ? MD5公認被破解不代表其可逆,而是一段字符串加密后的密文,可以通過強大運算計算出字符串加密后的密文對應的原始字符串,但也不是絕對的被破解。

? ? ? ? ? ? ? ? PS.暴力破解是指通過將明文和生成的密文進行配對,生成強大的數據庫,在數據庫中搜索,在這里就可以破解密碼。破解網址 http://www.cmd5.com

? ? ? ? ? ? ·提升MD5加密安全性,解決辦法

? ? ? ? ? ? ? ? 1.先明文加鹽,然后再進行MD5。即明文后拼接字符串(此時拼接的字符串要 足夠長+足夠咸+足夠復雜),再進行MD5加密。如:#define salt @"1342*&%&shlfhs390(*^^6R%@@KFGKF"

? ? ? ? ? ? ? ? 2.先加密+亂序

? ? ? ? ? ? ? ? 3.亂序|加鹽,多次MD5加密等

? ? ? ? ? ? ? ? 4.使用消息認證機制HMAC:給定一個"秘鑰",對明文進行加密,并且做"兩次散列"!-> 得到的結果,還是 32 個字符,相對安全(KEY是服務器傳給你的,不是你寫死的)。

? ? ? ? ? ? ? ? ? ? 4.1 消息認證機制(HMAC)原理

? ? ? ? ? ? ? ? ? ? 消息的發送者和接收者有一個共享密鑰,發送者使用共享密鑰對消息加密計算得到MAC值(消息認證碼)。

? ? ? ? ? ? ? ? ? ? 消息接收者使用共享密鑰對消息加密計算得到MAC值,比較兩個MAC值是否一致。

? ? ? ? ? ? ? ? ? ? 4.2 使用:客戶端需要在發送的時候把(消息)+(消息·HMAC)一起發送給服務器;服務器接收到數據后,對拿到的消息用共享的KEY進行HMAC,比較是否一致,如果一致則信任。

iOS實際開發中Hash加密應用場景及優化

2.3對稱加密算法AES和DES

? ? 采用單鑰密碼系統加密方式。同一個密鑰可以同時用作信息的加密和解密。

????對稱加密的特點

? ? ? ? ? ?1. 加密速度快,可加密大文件?

? ? ? ? ? ?2. 密文可逆,加密和解密的過程是可逆的,一旦密鑰泄露,就會導致暴露

? ? ? ? ? ?3. 加密后編碼找不到對應字符,會出現亂碼,一般結合base64?

????經典算法

????????????DES 數據加密標準

????????????AES 高級加密標準(基于DES)

提示:加密過程是先加密,再base64編碼; 解密過程是先base64解碼,再解密 (base64是為了可讀性,不然會出現亂碼)

2.4 非對稱加密RSA

? ? ·非對稱加密的特點

? ? ? ? 使用 公鑰 加密,使用 私鑰 解密

? ? ? ? 使用 私鑰 加密,使用 公鑰 解密(私鑰簽名,公鑰驗簽)

? ? ? ? 公鑰是公開的,私鑰保密

? ? ? ? 加密處理安全,但是性能極差

? ? ·經典算法-->RSA

# MAC上生成公鑰、私鑰的方法?

1.打開終端,切換到自己想輸出的文件夾下

2.輸入指令:openssl(openssl是生成各種秘鑰的工具,mac已經嵌入)

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(私鑰轉格式,在ios端使用私鑰解密時用這個私鑰)

注意:在MAC上生成三個.pem格式的文件,一個公鑰,兩個私鑰,都可以在終端通過指令vim xxx.pem 打開,里面是字符串,第三步生成的私鑰是java端用來解密數據的,第五步轉換格式的私鑰iOS端可以用來調試公鑰、私鑰解密(因為私鑰不留在客戶端)

iOS端公鑰加密私鑰解密、java端公鑰加密私鑰解密,java端私鑰加密公鑰解密都容易做到,iOS不能私鑰加密公鑰解密,只能用于驗簽

參考資料:

App安全https://www.cnblogs.com/fengmin/p/8178217.html

iOS加密詳解http://www.lxweimin.com/p/cee228aabdbc

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372