3DES加密認識與使用

2021-07-16 03:48:50 字數 1267 閱讀 6713

公司的專案需要用到3des加密,於是自己學習了一下,下面分享一下學習內容:

3des是三重資料加密演算法塊密碼的通稱,聽到名字就知道與des加密有關,簡單的理解為用des加密三次,通過增加des的金鑰長度來避免暴力破解。

3des演算法是指使用雙長度(16位元組)

金鑰k=(kl||kr)將8位元組明文

資料塊進行3次des加密/解密。

3des的金鑰是8個位元組,但實際上只有7個用上,也就是56位。

3des是用3個或2個des金鑰加密一串明文,最少112位最多168位。也就是14~21個字母或數字符號。

設ek()和dk()分別代表des演算法的加密和解密過程,k代表des演算法使用的金鑰,m代表明文,c代表密文,則3des演算法的過程可表示為:

加密:c = ek3(dk2(ek1(m))) 即對明文資料進行,加密 --> 解密 --> 加密的過程,最後得到密文資料

解密:m = dk1(ek2(dk3(c))) 即對密文資料進行,解密 --> 加密 --> 解密的過程,最後得到明文資料

這裡可以k1=k3,但不能k1=k2=k3(如果相等的話就成了des演算法了)

3des(k1=k3),可以是3des-cbc,也可以是3des-ecb,3des-cbc整個演算法的流程和des-cbc一樣,但是在原來的加密或者解密處增加了異或運算的步驟,使用的金鑰是16位元組長度的金鑰,將金鑰分成左8位元組和右8位元組的兩部分,即k1=左8位元組,k2=右8位元組,然後進行加密運算和解密運算。

3des(k1≠k2≠k3),和3des-cbc的流程完全一樣,只是使用的金鑰是24位元組的,但在每個加密解密加密時候用的金鑰不一樣,將金鑰分為3段8位元組的金鑰分別為金鑰1、金鑰2、金鑰3,在3des加密時對加密解密加密依次使用金鑰1、金鑰2、金鑰3,在3des解密時對解密加密解密依次使用金鑰3、金鑰2、金鑰1。

由於des加解密演算法是每8個位元組作為乙個加解密資料塊,因此在實現該演算法時,需要對資料進行分塊和補位(即最後不足8位元組時,要補足8位元組)

ecb模式:將待處理的資料分成若干塊,每塊的長度都為8位元組。然後對每塊進行加密或解密,最後將他們連線在一起便是最終的結果。每一塊的資料互不干擾。

cbc模式:也需要將待處理的資料分塊,但是每一塊資料在加密或者解密之前都要與前一塊的結果做一次異或操作,因此該模式需要定義乙個特殊的8位元組key,用於和第一塊資料做異或操作。這個特殊的key就是通常說的初始化向量。在**中書寫時需要配置iv引數,注意iv引數是對應cbc模式的。這樣一來,每一塊資料都是有聯絡的,這是與ecb模式不同的一點。

ios

Des與3Des加密解密

des和3des演算法 public class des b ret.tostring return ret.tostring 3des加密 金鑰不能每8位重複,例如 123456781234567812345678,如果這樣則演算法退化為des,c 會檢測,不能使用 明文 金鑰 public st...

iOS DES加密與3DES加密

最近專案中遇到了加解密的問題,然後翻閱了相關資料,成功搞定。現在將這些知識點總結一下,一是為了以後複習,二是為了給大家提供參考。1.先來說說des操作,定義我這裡就不敘述了,網上一堆一堆的。接下來說一下使用時應該注意的幾點。首先,大家要分清key 金鑰 data 待運算元據 跟mode 加密模式 其...

3des演算法加密

實現的原理 public class encryption 執行3des加密 param secretkey 秘鑰 param datastring 明文 return base64編碼文字 public static string encryptdes string secretkey,strin...