本文共 2742 字,大约阅读时间需要 9 分钟。
经过一系列排查,问题孵出了水面;前端加密和后端解密没对应;很尴尬...
前端代码(错误正确比较):
import CryptoJS from 'crypto-js' //错误import encrypt from 'utils/aes' //正确// 用户名登录 Username({ commit }, userInfo) { const account = userInfo.account.trim() // const accChange = CryptoJS.AES.encrypt(account, 'secret key 123'); //错误 const accChange = encrypt.encrypt(account); //正确 return new Promise((resolve, reject) => { login(accChange, userInfo.pass).then(response => { const { data } = response if (data.resp_code === 0) { const token = data.datas.authorization sessionStorage.setItem('authorization',token) commit('TOKEN', token) setToken(token) } resolve(response) }).catch(error => { reject(error) }) }) },
后端代码(正确):
private static String SALT="bjbcsddskdkdkkkkdksk";//CBC加密偏移量private static String IVCODE="5e8y6w45ju8w9jq8";/** * 解密 * @param encryptStr 解密的字符串 * @param decryptKey 解密的key值 * @return * @throws Exception */ public static String decrypt(String encryptStr, String decryptKey) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec iv = new IvParameterSpec(IVCODE.getBytes()); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"), iv); // 采用base64算法进行转码,避免出现中文乱码 byte[] encryptBytes = Base64.decodeBase64(encryptStr); byte[] decryptBytes = cipher.doFinal(encryptBytes); return new String(decryptBytes);}
aes.js文件:
import Vue from 'vue'import CryptoJS from 'crypto-js'//数据解密export default { decrypt(content) { var sKey = CryptoJS.enc.Utf8.parse("bjbcsddskdkdkkkkdksk"); var iv = CryptoJS.enc.Utf8.parse("5e8y6w45ju8w9jq8"); // var decrypt = CryptoJS.AES.decrypt(content, sKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); var decrypt = CryptoJS.AES.decrypt(content, sKey, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ); var resultStr = CryptoJS.enc.Utf8.stringify(decrypt).toString(); return resultStr; }, encrypt(content) { var sKey = CryptoJS.enc.Utf8.parse("bjbcsddskdkdkkkkdksk"); var iv = CryptoJS.enc.Utf8.parse("5e8y6w45ju8w9jq8"); let srcs = CryptoJS.enc.Utf8.parse(content); let encrypted = CryptoJS.AES.encrypt(srcs, sKey, { iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); },}
转载地址:http://tsbxi.baihongyu.com/