crypto 的使用方法和說明


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) }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM