3DES:java
3DES加密就是DES的增強版,三重加密。將192位密鑰分紅三段,每段64位,除去8位奇偶校驗,剩下56位用來加密。
web
數據補位:安全
加密時,將數據按照8個字節一段進行加密,這就出現最後一段不足8個字節的問題,因此會補足8位。工具
補位有多種方式:加密
java中經常使用的 PKCS5Padding與.net 經常使用PKCS7都是將將須要填充的長度做爲值spa
例子 數據長度爲9,因此須要拆成兩個8,缺乏7位.net
數據 AA AA AA AA AA AA AA AA AA orm
填充後 : AA AA AA AA AA AA AA AA AA 07 07 07 07 07 07 07 07ci
通常.net PKCS7=java PKCS5Paddingit
還有補0的,zero padding和不少。
加密模式:
ECB:java默認的加密模式,就是將數據按照8個字節一段進行DES加密或解密獲得一段8個字節的密文或者明文,最後一段不足8個字節,按照需求補足8個字節進行計算,以後按照順序將計算所得的數據連在一塊兒便可,各段數據之間互不影響。
CBC:.net默認的加密模式,新增一個初始化向量iv,使得加密結果更加安全。
加密步驟以下:
1)首先將數據按照8個字節一組進行分組獲得D1D2......Dn(若數據不是8的整數倍,用指定的PADDING數據補位)
2)第一組數據D1與初始化向量I異或後的結果進行DES加密獲得第一組密文C1(初始化向量I爲全零)
3)第二組數據D2與第一組的加密結果C1異或之後的結果進行DES加密,獲得第二組密文C2
4)以後的數據以此類推,獲得Cn
5)按順序連爲C1C2C3......Cn即爲加密結果。
異或(同爲0 異爲1 1100+1011=0111)
還有CFB和OFB
ECB是不推薦的方式,Key相同時,相同的明文在不一樣的時候產生相同的明文,容易遭到字典攻擊;
CBC因爲加入了向量參數,必定程度上抵禦了字典工具,但缺點也隨之而來,一旦中間一個數據出錯或丟失,後面的數據將受到影響;
CFB與CBC相似,好處是明文和密文不用是8bit的整數倍,中間一個數據出錯,隻影響後面的幾個塊的數據;
OFB比CFB方式,一旦一個數據出錯,不會影響後面的數據,但安全性下降;
所以,推薦使用CFB方式,但每一個數據包單獨加密,不然一個數據包丟失,須要作不少容錯處理;
固然,具體問題也要具體分析,對於只須要」特定安全性」①,不須要」計算安全性」以上的軟件,也可使用ECB模式;