首頁 > 軟體

Vue中使用crypto-js AES對稱加密演演算法實現加密解密

2022-03-24 10:00:24

 在數位加密演演算法中,通過可劃分為對稱加密非對稱加密

對稱加密:如AES,DES,3DES

含義:加密和解密使用的是同一把鑰匙。金鑰不能在網路中傳輸,避免被攔截。如果要傳輸,必須要對金鑰進行非對稱加密再加密一次。

優點:演演算法簡單,加密解密容易,效率高,執行快。

缺點:相對來說不算特別安全,只有一把鑰匙,密文如果被攔截,且金鑰也被劫持,那麼,資訊很容易被破譯。

非對稱加密:如RSA DSA RCC

含義:有兩個鑰匙,及公鑰(Public Key)和私鑰(Private Key)。公鑰和私鑰是成對的存在,如果對原文使用公鑰加密,則只能使用對應的私鑰才能解密。通過私鑰經過一系列演演算法是可以推匯出公鑰的,但是無法通過公鑰反向推倒出私鑰,這個過程的單向的。

優點:安全,即使密文被攔截、公鑰被獲取,但是無法獲取到私鑰,也就無法破譯密文。作為接收方,務必要保管好自己的金鑰。

缺點:加密演演算法及其複雜,安全性依賴演演算法與金鑰,而且加密和解密效率很低。

 下載crypto-js

cnpm i -S crypto-js

區域性參照

import CryptoJS from "crypto-js";

加密解密資料

前端CBC模式或者ECB模式下的填充方式 Pkcs7,對應後端AES演演算法模式中的 PKCS5Padding 填充方式

AES演演算法的ECB模式加密-設定祕鑰

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

優點:

  • 簡單;
  • 有利於平行計算;
  • 誤差不會被擴散; 

缺點:  

  • 不能隱藏明文的模式
  • 可能對明文進行主動攻擊

因此,此模式適於加密小訊息。 

祕鑰必須為16進位制

encryptData() {
      // 此處key為16進位制
      let key = '385f33cb91484b04a177828829081ab7';
      console.log('金鑰:', key);
      // key格式化處理
      key = CryptoJS.enc.Utf8.parse(key);
      // 加密內容
      const polygonGeojson = {
        type: 'Feature',
        properties: {},
        geometry: {
          type: 'Polygon',
          coordinates: [
            [
              [106, 33],
              [108.03955078125, 32.2313896627376],
              [108.25927734375, 33.15594830078649],
              [106, 33]
            ]
          ]
        }
      };
      const content = JSON.stringify(polygonGeojson);
      console.log('加密前:', polygonGeojson);
      // 加密方法
      const encryptedContent = CryptoJS.AES.encrypt(content, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      });
      const encStr = encryptedContent.ciphertext.toString();
      console.log('加密後:', encStr);
      // 解密方法
      const decryptedContent = CryptoJS.AES.decrypt(
        CryptoJS.format.Hex.parse(encStr),
        key,
        {
          mode: CryptoJS.mode.ECB,
          padding: CryptoJS.pad.Pkcs7
        }
      );
      console.log(
        '解密:',
        JSON.parse(CryptoJS.enc.Utf8.stringify(decryptedContent))
      );
    }

AES演演算法的CBC模式加密-設定祕鑰和偏移量

CBC(Cipher Block Chaining,加密塊鏈)模式 

優點:  

  • 不容易主動攻擊
  • 安全性好於ECB
  • 適合傳輸長度長的報文,是SSL、IPSec的標準。 

缺點:  

  • 不利於平行計算
  • 誤差傳遞
  • 需要初始化向量IV

CBC模式前、後端需要確定偏移量的值,並且保持一致,這樣才能確保後端解密成功。

    encryptData() {
      // 此處key為16進位制
      let key = '385f33cb91484b04a177828829081ab7';
      console.log('金鑰:', key);
      // key格式化處理
      key = CryptoJS.enc.Utf8.parse(key);
 
      // 偏移量長度為16位元, 注:偏移量需要與後端定義好,保證一致
      let iv_key = '37fa77f6a3b0462d';
      let iv = CryptoJS.enc.Utf8.parse(iv_key);
      // 加密內容
      const polygonGeojson = {
        type: 'Feature',
        properties: {},
        geometry: {
          type: 'Polygon',
          coordinates: [
            [
              [106, 33],
              [108.03955078125, 32.2313896627376],
              [108.25927734375, 33.15594830078649],
              [106, 33]
            ]
          ]
        }
      };
      const content = JSON.stringify(polygonGeojson);
      console.log('加密前:', polygonGeojson);
      // 加密方法
      const encryptedContent = CryptoJS.AES.encrypt(content, key, {
        iv: iv,
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      });
      const encStr = encryptedContent.ciphertext.toString();
      console.log('加密後:', encStr);
      // 解密方法
      const decryptedContent = CryptoJS.AES.decrypt(
        CryptoJS.format.Hex.parse(encStr),
        key,
        {
          iv: iv,
          mode: CryptoJS.mode.ECB,
          padding: CryptoJS.pad.Pkcs7
        }
      );
      console.log(
        '解密:',
        JSON.parse(CryptoJS.enc.Utf8.stringify(decryptedContent))
      );
    }

參考:

https://www.cnblogs.com/cndarren/p/15108270.html

https://blog.csdn.net/qq_40323256/article/details/116947888

到此這篇關於Vue中使用crypto-js AES對稱加密演演算法實現加密解密的文章就介紹到這了,更多相關Vue crypto-js AES對稱加密解密內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com