# Android 安全加密:對稱加密詳解 ## 定義: 加密和解密都使用同一把秘鑰,這種加密方法稱為對稱加密,也稱為單密鑰加密。 簡單理解為:==加密解密都是同一把鑰匙。== 加密應用場景:敏感信息加密,比如,證件號碼,銀行卡賬號,郵件信息,聊天記錄cookie信息,私鑰保護等等 ## 對稱加密常用算法 AES、DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK 等。 --- ### AES 高級加密標準(英語:Advanced Encryption Standard,縮寫:AES) #### AES支持三種長度的密鑰:128位,192位,256位 #### AES加密原理:**分組加密** ![](https://i.imgur.com/7pnVzAN.png) AES算法在對明文加密的時候,並不是把整個明文一股腦加密成一整段密文,而是把==明文拆分成一個個獨立的明文塊,每一個明文塊長度128bit==。 這些明文塊經過AES加密器的複雜處理,生成一個個獨立的密文塊,這些==密文塊拼接在一起,就是最終的AES加密結果==。 明文長度有問題: 假如一段明文長度是192bit,如果按每128bit一個明文塊來拆分的話,第二個明文塊只有64bit,不足128bit。這時候怎麼辦呢?就需要對明文塊進行**填充**(Padding)。 #### 舉例幾種填充形式: 1. NoPadding: 不做任何填充,但是要求明文必須是16字節的整數倍。 3. PKCS5Padding(默認): 如果明文塊少於16個字節(128bit),在明文塊末尾補足相應數量的字符,且每個字節的值等於缺少的字符數。 比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6個字節,則補全為{1,2,3,4,5,a,b, c,d,e,6,6,6,6,6,6} 3. ISO10126Padding: 如果明文塊少於16個字節(128bit),在明文塊末尾補足相應數量的字節,最後一個字符值等於缺少的字符數,其他字符填充隨機數。比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6個字節,則可能補全為{1,2,3,4,5,a,b ,c,d,e,5,c,3,G,$,6} #### 工作模式: AES的工作模式,體現在把明文塊加密成密文塊的處理過程中。 #### AES加密算法提供了五種不同的工作模式: ECB、CBC、CTR、CFB、OFB ### 1. ECB模式(默認): **電碼本模式(Electronic Codebook Book)** 是最簡單的工作模式,在該模式下,每一個==明文塊的加密都是完全獨立,互不干涉的==。 ![](https://i.imgur.com/51BNzOF.png) **優點:** 1.簡單 2.有利於並行計算 **缺點:** 相同的明文塊經過加密會變成相同的密文塊,因此安全性較差。 ### 2. CBC : **密碼分組鏈接模式Cipher Block Chaining** 初始向量IV(Initialization Vector),簡稱IV。 ==目的是防止同樣的明文塊始終加密成同樣的密文塊。== 上一個密文分組和下一個明文分組的內容混合加密出的密文塊相**異或**。這樣以來,相同的明文塊加密出的密文塊顯然是不一樣的,==因此可以避免ECB模式的缺陷==。 ==但當加密第一個明文分組時,由於不存在上一個密文分組,因此需要準備與分組等長的初始化向量IV,來代替上一個密文分組。== ![](https://i.imgur.com/jPUyn0w.png) **優點:** 安全性更高 **缺點:** 1.無法並行計算,性能上不如ECB 2.引入初始化向量IV,增加複雜度 > > 異或 XOR > 兩個運算元的一種邏輯分析類型。與一般的邏輯或不同,當兩兩數值相同為否,而數值不同時為真。 > https://zh.wikipedia.org/wiki/%E9%80%BB%E8%BE%91%E5%BC%82%E6%88%96 > ### 3. CTR : **計數器模式 Counter** ==每個分組對應一個逐次累加的計數器,並通過對計數器進行加密來生成金鑰流。== 也即最終的密文分組是通過將計數器加密得到的位元序列,與明文分組進行異或運算得到的。 ![](https://i.imgur.com/lhMw3Ul.png) ### 4. CFB : **密文反饋模式 Cipher FeedBack** 上一個密文分組作為加密演算法的輸入,輸出與明文異或作為下一個分組的密文。在CFB模式中,明文分組和密文分組之間只有一次異或。 CFB模式與一次性密碼本相似,都是通過將==明文與隨機位元序列進行異或運算來生成密文==。 但由於CFB模式中==密碼演算法的輸出是通過計算得到的,並非真正的隨機數==,因此不具備一次性密碼本那樣理論上不可破譯的性質。 ==CFB模式可以看做使用分組方式實現流密碼的方式。== ![](https://i.imgur.com/BALM0EW.png) ### 5. OFB : **輸出反饋模式 Output Feedback** OFB模式與CFB模式類似,只是加密演算法的輸入是上一次加密的輸出。 在OFB模式中,異或所需的金鑰流,可以事先通過密碼演算法生成,即生成金鑰流的操作可以與異或運算並行。 OFB模式加密和處理解密邏輯相同,明文與金鑰流異或生成密文,密文與金鑰流異或生成明文。 ![](https://i.imgur.com/4NlULje.png) --- ### DES : **Data Encryption Standard** 即數據加密標準,是一種歷史比較悠久的加密算法,上世紀70年代就在使用,是由IBM公司設計的算法,並被美國政府於1976年確定為國家標準局確定為聯邦資料處理標準,這種加密算法再七八十年代廣為流傳,但隨著計算機硬件的指數級發展,處理能力不斷提高,DES 加密算法已經不再安全,早在1999年,就有組織宣稱使用在23小時之內成功破解了,使用64位數據塊,這主要是由於DES算法的秘鑰太短,只有56位,很容易通過暴力方式破解。目前,DES算法已經被AES算法所取代。 --- ### 3DES: 三重數據加密算法,Triple DES,也叫三級DES。3DES 不算是一種新的加密算法,它相當於在DES加密算法之上做的增強。由於DES算法本身的短秘鑰容易被暴力破解,所以3DES通過增加DES的秘鑰長度,使用3個56位的秘鑰對數據進行加密,從而能夠增強安全性,延緩暴力破解的可能。但加密效率會更慢,3DES被認為是DES向AES發展的過度算法。 參考資料: https://blog.csdn.net/lazyer_dog/article/details/90695895 https://iter01.com/169925.html https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/642-shu-ju-jia-mi/6421-chang-jian-dui-cheng-jia-mi-suan-fa.html