首先,若是是使用nodejs + vue 寫的前端, 那麼你須要npm 加載一個js文件前端
npm i crypto-js --save --save-exact npm install crypto-js
package com.telling.util.crypto; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Aes { private static final Log logger = LogFactory.getLog(Aes.class); // log日誌 private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; // "算法/模式/補碼方式" /***************************************************** * AES加密 * * @param content * 加密內容 * @param key * 加密密碼,由字母或數字組成 此方法使用AES-128-ECB加密模式,key須要爲16位 * 加密解密key必須相同,如:abcd1234abcd1234 * @return 加密密文 ****************************************************/ public static String enCode(String content, String key) { if (key == null || "".equals(key)) { logger.info("key爲空!"); return null; } if (key.length() != 16) { logger.info("key長度不是16位!"); return null; } try { byte[] raw = key.getBytes(); // 得到密碼的字節數組 SecretKeySpec skey = new SecretKeySpec(raw, "AES"); // 根據密碼生成AES密鑰 Cipher cipher = Cipher.getInstance(ALGORITHM); // 根據指定算法ALGORITHM自成密碼器 cipher.init(Cipher.ENCRYPT_MODE, skey); // 初始化密碼器,第一個參數爲加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操做,第二個參數爲生成的AES密鑰 byte[] byte_content = content.getBytes("utf-8"); // 獲取加密內容的字節數組(設置爲utf-8)否則內容中若是有中文和英文混合中文就會解密爲亂碼 byte[] encode_content = cipher.doFinal(byte_content); // 密碼器加密數據 return Base64.encodeBase64String(encode_content); // 將加密後的數據轉換爲字符串返回 } catch (Exception e) { e.printStackTrace(); return null; } } /***************************************************** * AES解密 * * @param content * 加密密文 * @param key * 加密密碼,由字母或數字組成 此方法使用AES-128-ECB加密模式,key須要爲16位 加密解密key必須相同 * @return 解密明文 ****************************************************/ public static String deCode(String content, String key) { if (key == null || "".equals(key)) { logger.info("key爲空!"); return null; } if (key.length() != 16) { logger.info("key長度不是16位!"); return null; } try { byte[] raw = key.getBytes(); // 得到密碼的字節數組 SecretKeySpec skey = new SecretKeySpec(raw, "AES"); // 根據密碼生成AES密鑰 Cipher cipher = Cipher.getInstance(ALGORITHM); // 根據指定算法ALGORITHM自成密碼器 cipher.init(Cipher.DECRYPT_MODE, skey); // 初始化密碼器,第一個參數爲加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操做,第二個參數爲生成的AES密鑰 byte[] encode_content = Base64.decodeBase64(content); // 把密文字符串轉回密文字節數組 byte[] byte_content = cipher.doFinal(encode_content); // 密碼器解密數據 return new String(byte_content, "utf-8"); // 將解密後的數據轉換爲字符串返回 } catch (Exception e) { e.printStackTrace(); return null; } } /***************************************************** * AES加密解密測試 * * @param args * @return ****************************************************/ public static void main(String[] args) { String content = "加密解密測試"; logger.info("加密content:" + content); String key = "abcd1234abcd1234"; logger.info("加密key:" + key); String enResult = enCode(content, key); logger.info("加密result:" + enResult); String deResult = deCode(enResult, key); logger.info("解密result:" + deResult); } }
@ResponseBody @RequestMapping("/getqingHou") public String getqingHou(HttpServletRequest request, HttpServletResponse response) throws Exception { try { Map map = this.getParameterMap(request); Map retuData = new HashMap<>(16); map.put("role", "admin"); /*****************前端傳過來的加密值,進行解密*********************************************************/ String keyC = map.get("keyC").toString(); String contC = map.get("contentC").toString(); System.out.println(keyC + " : " + contC); String decC = new String(Aes.deCode(contC, keyC)); System.out.println("前端傳進來的數據: 解密後----》》》 " + decC); System.out.println("------------------------------------------------------------------"); /**************************加密字符串,解密字符串****************************************************/ // 1234567890ABCDEF1234567890ABCDEf String key = UUID.randomUUID().toString().replace("-", "").toUpperCase().toString().substring(0,14) + "=="; String src = "Ejian111234"; System.out.println("key---->>>> "+key); // 加密字符串 String enc = Aes.enCode(src, key); System.out.println("加密後---》》》 " + enc); // 解密後 String dec = new String(Aes.deCode(enc, key)); System.out.println("解密後----》》》 " + dec); System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); /***************************加密數組,傳到前端進行解密***************************************************/ String mapEnc = Aes.enCode(JSON.toJSONString(map), key); System.out.println("集合類型加密後的數據: " + mapEnc); retuData.put("enc", enc); retuData.put("key", key); retuData.put("map", mapEnc); logger.info("+++++++get user info !" + retuData); return JSON.toJSONString(retuData); } catch (LoginException e) { logger.error(e.getMessage()); return e.getErrorCode() + "_" + e.getMessage(); } }
const CryptoJS = require("crypto-js") /***************************************************** * AES加密 * @param content 加密內容 * @param key 加密密碼,由字母或數字組成 此方法使用AES-128-ECB加密模式,key須要爲16位 加密解密key必須相同,如:abcd1234abcd1234 * @return 加密密文 ****************************************************/ export function encrypt(content, key) { const sKey = CryptoJS.enc.Utf8.parse(key); const sContent = CryptoJS.enc.Utf8.parse(content); const encrypted = CryptoJS.AES.encrypt(sContent, sKey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return encrypted.toString(); } /***************************************************** * AES解密 * @param content 加密密文 * @param key 加密密碼,由字母或數字組成 此方法使用AES-128-ECB加密模式,key須要爲16位 加密解密key必須相同,如:abcd1234abcd1234 * @return 解密明文 ****************************************************/ export function decrypt(content, key) { const sKey = CryptoJS.enc.Utf8.parse(key); const decrypt = CryptoJS.AES.decrypt(content, sKey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); }
<script> import { getqingHou } from "api/test.js"; import { decrypt, encrypt } from "api/cryptoAes.js" var CryptoJS = require("crypto-js") export default { name: "login", created() { this.getqingHouFun() }, methods: { getqingHouFun() { console.log('============test===start===========') getqingHou({test: 'test', keyC: '1234567890ABCDEF', contentC: encrypt('Ejian111234567890', '1234567890ABCDEF')}).then(response => { console.log(response.data) console.log('=====================aes===================') // npm i crypto-js --save --save-exact // npm install crypto-js var decrypt1 = decrypt(response.data.enc, response.data.key); console.log("後端解密後的數據: ---字符串類型>>> " + decrypt1) var decrypt2 = decrypt(response.data.map, response.data.key); console.log("後端解密後的數據:---集合類型>>> " + decrypt2) var json = JSON.parse(decrypt2); console.log("後端解密後的數據:---集合類型>>>------轉JSON>>> " + json.contentC) console.log('===========test===end===================') }) } } } </script>
好了,代碼所有貼出來了, 直接copy就能用, 記得看過點贊, 發個言在走哦!vue