1. 程式人生 > >Crypto加密解密

Crypto加密解密

lse nss uri component 調用 簽名 cad 封裝 ()

crypto 模塊提供了加密功能,包含對 OpenSSL 的哈希、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。我們這裏講crypto AES算法加密

一、使用步驟

1.引入Crypto

1.1 使用Crypto,有兩種形式。一種是是在script便簽直接引入,例如:

<script src="lib/CryptoJS v3.1.2/rollups/aes.js"></script>

1.2 還有一種通過npm安裝CryptoJS,例如:

npm install crypto-js

1.2.1 如果是通過npm安裝,需要引入,代碼如下:

import CryptoJS from crypto-js/crypto-js

2.開始編寫邏輯代碼

安裝完成後,你根據自己的需求對需要加密的數據進行加密。

二、如何加密

第一種,先上代碼:

    //aes加密
    encrypt (word) {
      const key = CryptoJS.enc.Utf8.parse("1234567890000000"); // 加密秘鑰 16位
      const iv = CryptoJS.enc.Utf8.parse("1234567890000000");  // 加密矢量
      let encrypted = ‘‘;
      if (typeof
(word) == string) { let srcs = CryptoJS.enc.Utf8.parse(word); encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); } else if (typeof(word) == object) { //對象格式的轉成json字符串 data = JSON.stringify(word); let srcs
= CryptoJS.enc.Utf8.parse(data); encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) } return encrypted.ciphertext.toString(); } },

代碼講解:

這裏的數據可以用兩種數據格式,一種是字符串,一種是對象。然後我們對數據進行處理然後再根據自己定義的秘鑰和矢量調用aes算法進行加密。

第二種,先上代碼:

encryption (data) {
    let strs=[];
    for(let i in data){
        strs.push(i+=+data[i]);
    }
    strs.sort();  // 數組排序
    strs=strs.join(&); // 數組變字符串
    let endData=strs+&sign=+CryptoJS.MD5(strs+ADfj3kcadc2349akvm1CPFFCD84f)
    .toString(); // MD5加密
    let key = CryptoJS.enc.Utf8.parse("0880076B18D7EE81"); // 加密秘鑰
    let iv = CryptoJS.enc.Utf8.parse("CB3EC842D7C69578");  //  矢量
    let encryptResult = CryptoJS.AES.encrypt(endData,key, {   //  AES加密
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7  // 後臺用的是pad.Pkcs5,前臺對應為Pkcs7
    });
    return encodeURIComponent(CryptoJS.enc.Base64.stringify(encryptResult.ciphertext));  // Base64加密再 encode;
}

代碼講解:

首先我們將數據進行排序,然後將排序好的數據進行MD5加密作為接口的簽名,接著將排好序的數據和接口簽名拼接上進行AES加密,倒數第二步,將AES加密後的密文進行base64加密,最後將最終的密文encodeURIComponent。

三、如何解密

1.後臺返回的數據也是密文

2.後臺返回的數據是json格式

代碼如下:

decryption(data) {
    let key = CryptoJS.enc.Utf8.parse("0880076B18D7EE81");  // 加密秘鑰
    let iv = CryptoJS.enc.Utf8.parse("CB3EC842D7C69578");   //  矢量
    let baseResult=CryptoJS.enc.Base64.parse(data);   // Base64解密
    let ciphertext=CryptoJS.enc.Base64.stringify(baseResult);     // Base64解密
    let decryptResult = CryptoJS.AES.decrypt(ciphertext,key, {    //  AES解密
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
  // 第一種 let resData
=decryptResult.toString(CryptoJS.enc.Utf8).toString(); return JSON.parse(resData);
// 第二種
  return CryptoJS.enc.Utf8.stringify(decryptResult) }

Crypto加密解密