1.模块安装
 
 
2.src–>util–>secret.js
 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 | import CryptoJS from 'crypto-js'
 // 默认的 KEY 与 iv 如果没有给
 const KEY = CryptoJS.enc.Utf8.parse("1234567890123456");
 const IV = CryptoJS.enc.Utf8.parse('1234567890123456');
 /**
 * AES加密 :字符串 key iv  返回base64
 */
 export function Encrypt(word, keyStr, ivStr) {
 let key = KEY;
 let iv = IV;
 if (keyStr) {
 key = CryptoJS.enc.Utf8.parse(keyStr);
 iv = CryptoJS.enc.Utf8.parse(ivStr);
 }
 let srcs = CryptoJS.enc.Utf8.parse(word);
 var encrypted = CryptoJS.AES.encrypt(srcs, key, {
 iv: iv,
 mode: CryptoJS.mode.CBC,
 padding: CryptoJS.pad.ZeroPadding
 });
 return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
 }
 /**
 * AES 解密 :字符串 key iv  返回base64
 *
 * @return {string}
 */
 export function Decrypt(word, keyStr, ivStr) {
 let key  = KEY;
 let iv = IV;
 
 if (keyStr) {
 key = CryptoJS.enc.Utf8.parse(keyStr);
 iv = CryptoJS.enc.Utf8.parse(ivStr);
 }
 
 let base64 = CryptoJS.enc.Base64.parse(word);
 let src = CryptoJS.enc.Base64.stringify(base64);
 
 let decrypt = CryptoJS.AES.decrypt(src, key, {
 iv: iv,
 mode: CryptoJS.mode.CBC,
 padding: CryptoJS.pad.ZeroPadding
 });
 
 let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
 return decryptedStr.toString();
 }
 | 
 
 
 
3.login.vue引入加密方法
 
| 1 | import {Encrypt} from '../utils/Secret.js' | 
 
4.login.vue登录请求发起,对密码参数加密
 
| 12
 3
 4
 |  let param={username:this.loginForm.username,
 password:Encrypt(this.loginForm.password)  //密码加密
 }
 | 
 
 
 
5.后端pom.xml
 
| 12
 3
 4
 5
 6
 | <!--密码解密--><dependency>
 <groupId>org.bouncycastle</groupId>
 <artifactId>bcprov-jdk15on</artifactId>
 <version>1.60</version>
 </dependency>
 | 
 
6.后端utils–>secretUtil.java
 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 | package com.unccr.ms.utils;
 import org.apache.tomcat.util.codec.binary.Base64;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
 
 
 /**
 * @author YSK
 * @date 2020/8/24 13:13
 */
 public  class SecretUtil {
 /***
 * key和iv值可以随机生成
 */
 private static String KEY = "1234567890123456";
 
 private static String IV = "1234567890123456";
 
 /***
 * 加密
 * @param  data 要加密的数据
 * @return encrypt
 */
 public static String encrypt(String data){
 return encrypt(data, KEY, IV);
 }
 
 /***
 * param data 需要解密的数据
 * 调用desEncrypt()方法
 */
 public static String desEncrypt(String data){
 return desEncrypt(data, KEY, IV);
 }
 
 /**
 * 加密方法
 * @param data  要加密的数据
 * @param key 加密key
 * @param iv 加密iv
 * @return 加密的结果
 
 */
 private static String encrypt(String data, String key, String iv){
 try {
 //"算法/模式/补码方式"NoPadding PkcsPadding
 Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
 int blockSize = cipher.getBlockSize();
 
 byte[] dataBytes = data.getBytes();
 int plaintextLength = dataBytes.length;
 if (plaintextLength % blockSize != 0) {
 plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
 }
 
 byte[] plaintext = new byte[plaintextLength];
 System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
 
 SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
 IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
 
 cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
 byte[] encrypted = cipher.doFinal(plaintext);
 
 return new Base64().encodeToString(encrypted);
 
 } catch (Exception e) {
 e.printStackTrace();
 return null;
 }
 }
 
 /**
 * 解密方法
 * @param data 要解密的数据
 * @param key  解密key
 * @param iv 解密iv
 * @return 解密的结果
 */
 private static String desEncrypt(String data, String key, String iv){
 try {
 byte[] encrypted1 = new Base64().decode(data);
 
 Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
 SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
 IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
 cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
 byte[] original = cipher.doFinal(encrypted1);
 return new String(original).trim();
 } catch (Exception e) {
 e.printStackTrace();
 return null;
 }
 }
 }
 | 
 
7.登录Controller对前端传来的密码解密(先导入加密工具类)
 
| 12
 | //      SecretUtil.desEncrypt:  前端传来的加密密码进行解密User user=userService.loginByInfo(username, SecretUtil.desEncrypt(password));
 | 
 
8.结果测试
 请求中密码已被加密。
 后端控制台打印输出加密后的密码(与前端传来一致),解密后与原来的密码相同。