天天看點

前端開發資料傳輸加密方式之:AES加密AES 加密

AES 加密

//塊兒加密 塊長度 128

//對稱加密,每次疊代全加密(DES半加密)

//明文X軸,密文Y軸,加密疊代次數維數

攻擊模式

  1. PA: Padding attack //(填充攻擊)
  2. CPA: Chosen Plaintext Attack //選擇明文攻擊
  3. CCA: chosen-ciphertext attack //選擇密文攻擊

模式 mode

ECB 模式 ( Electronic Code Book mode) 電子密碼本模式

最簡單的模式

  1. 弱點:相同的明文加密的算法和密鑰相同,高風險模式;容易受PA(Padding attack)攻擊
  2. 特點:加密解密獨立不依賴,可同時進行了,明文被分割成多個塊兒進行加密,最後一個塊的長度不夠需填充到128

CBC 模式(Cipher block chaining mode) 密碼塊連結模式

  1. 特點:通過初始化向量實作 IV 與被加密的塊相同的長度 IV 通常是一個随機數。在解密時,從兩個鄰接的密文塊中即可得到一個明文塊。是以,解密過程可以被并行化,而解密時,密文中一位的改變隻會導緻其對應的明文塊完全改變和下一個明文塊中對應位發生改變,不會影響到其它明文的内容。
  2. 過程:将上一個加密的結果作為下一個加密的自由域 xor,加密同一段明文會得到不同的密文

加密過程是互相依賴的,不支援并行 解決方式

  1. 方案一:每次請求的加密都新生成一個AES 對象,這個方式降低了CBC模式的安全性,但比ECB模式還是更安全的。
  2. 方案二:可以請求的加密都新生成一個AES 對象,先對一段已知明文進行加密,然後将加密結果作為對送出的資料進行加密的IV,不會影響安全度。

padding

AES 是塊加密,每個塊有固定的長度 128,如果被加密對象長度不夠,需要有padding 填充字元來拼湊128。

常用庫

CryptoJs

ECB 模式

CryptoJS.AES.encrypt(word, key, {
   mode : CryptoJS.mode.ECB,
   padding : CryptoJS.pad.Pkcs7
 });
           

CBC 模式

CryptoJS.AES.encrypt(word, key, {
   mode : CryptoJS.mode.CBC,
   padding : CryptoJS.pad.Pkcs7,
   IV:'bvnnk123zkxvfkdmvk' //自定義
 });
           

常用加密封裝ECB模式

…前端開發資料傳輸加密方式之:AES加密