國密算法sm4 CBC模式加解密

一.什麼是CBC模式?
CBC模式的全稱是Cipher Block Chaining模式(密文分組鏈接模式),之所以叫這個名字,是因爲密文分組像鏈條一樣相互連接在一起。
在CBC模式中,首先將明文分組與前一個密文分組進行異或運算,然後再進行加密。

異或運算:

異或,英文爲exclusive OR,縮寫成xor

異或(xor)是一個數學運算符。它應用於邏輯運算。異或的數學符號爲“⊕”,計算機符號爲“xor”。其運算法則爲:

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b兩個值不相同,則異或結果爲1。如果a、b兩個值相同,異或結果爲0

異或也叫半加運算,其運算法則相當於不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運算法則爲:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同爲0,異爲1),這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。

異或略稱爲XOR、EOR、EX-OR

程序中有三種演算子:XOR、xor、⊕。

使用方法如下

z = x ⊕ y

z = x xor y

二.CBC模式加解密過程如下:

1.加密過程例如以下:

  1.  首先將數據依照8個字節一組進行分組得到D1D2......Dn(若數據不是8的整數倍,用指定的PADDING數據補位)
  2.  第一組數據D1與初始化向量iv異或後的結果進行DES加密得到第一組密文C1(初始化向量I爲全零)
  3. 第二組數據D2與第一組的加密結果C1異或以後的結果進行DES加密,得到第二組密文C2
  4. 之後的數據以此類推,得到Cn
  5. 按順序連爲C1C2C3......Cn即爲加密結果。

2. 解密密過程例如以下:

  1. 首先將數據依照8個字節一組進行分組得到C1C2C3......Cn
  2. 將第一組數據進行解密後與初始化向量I進行異或得到第一組明文D1(注意:一定是先解密再異或)
  3. 將第二組數據C2進行解密後與第一組密文數據進行異或得到第二組數據D2
  4. 之後依此類推。得到Dn
  5. 按順序連爲D1D2D3......Dn即爲解密結果。

這裏注意一點,解密的結果並不一定是我們原來的加密數據,可能還含有你補得位。一定要把補位去掉纔是你的原來的數據。

三.CBC模式特點

  • cbc模式在進行加密之前一定會與前一個密文組進行異或運算,因此即使明文D1與明文D2值相等,密文C1與密文C2也不一定是相等的
  • cbc模式無法單獨的對一個明文組進行加密,必須有前一個密文組,第一個密文組依賴於IV產生
  • 解密時如果其中一個密文組損壞,只要密文分組的長度沒有發生變化,則解密時最多隻有2個分組受到數據損壞的影響
  • 資源下載地址 https://download.csdn.net/download/qq_27969037/11327461
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章