博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AES 解密报错:Given final block not properly padded. Such issues can arise if a bad key is used dur
阅读量:4159 次
发布时间:2019-05-26

本文共 2742 字,大约阅读时间需要 9 分钟。

问题:系统登录账号密码密文传输,用AES加密之后;登录的时候抛出:Given final block not properly padded. Such issues can arise if a bad key is used dur。

经过一系列排查,问题孵出了水面;前端加密和后端解密没对应;很尴尬...

前端代码(错误正确比较):

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/

你可能感兴趣的文章
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
第十一章 - 直接内存
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>