vue前后端AES对称加密解密算法

本文探讨了在Vue和Java中使用AES加密解密时遇到的问题及解决方案,提供前端JS和后端Java的完整代码示例,确保前后端算法匹配。通过测试,实现了加密解密的一致性,确保数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AES算法的使用很简单,但常遇到前后端算法不匹配问题,这是个问题。

题外话:十多年没来了,最近没事,学习研究vue-springboot前后端分离技术。涉及到一些常见问题,网上一大堆,但很多说的不清楚,要么没经过实际验证。或者没说完整。今天就以这个由头开始,写写博客吧。
另外,代码里面参考了网上有些人的帖子甚至代码。由于看得比较多,不记得是谁的了。如果作者看到了,给我留言,我添加上去即可。得罪了。

废话不多说,先看前端js代码:

提示:crypto包已经由nodejs内置,无需额外安装。api用法可参阅 crypto官方文档

加密算法

/* 加密算法
*  采用aes-128-ecp算法
*  key必须为16字节utf8字符(如英文字母、数字等等)
*  iv设置为空‘’
*  输出为hex打斜字符串(大小写不影响解密)
*/

let crypto = require('crypto');
function encryption(data, key) {
   
   
	var iv = "";
	var cipherChunks = [];
	var cipher = crypto.createCipheriv('aes-128-ecb', key, iv);
	cipher.setAutoPadding(true);
	cipherChunks.push(cipher.update(data, 'utf8', 'hex'));
	cipherChunks.push(cipher.final('hex'));
	return cipherChunks.join('').toUpperCase();
}

解密算法

//解密算法
function decryption(data, key) {
   
   
	var iv = "";
	var cipherChunks = [];

	var decipher = crypto.createDecipheriv('aes-128-ecb', key, iv);
	decipher.setAutoPadding(true);
	cipherChunks.push(decipher.update(data, 'hex', 'utf8'));
	cipherChunks.push(decipher.final('utf8'));
	return cipherChunks.join('').toUpperCase();
}

测试一下:

let key = "tHisisakEY125689";
let data = "测试解密内容,随便什么都行";
var enc = encryption(data, key);
console.log("加密后=" + enc);

var deres = decryption(enc, key);
console.log("解密后=" + deres);
//控制台输出如下:
加密后=8E47C4EB4FA40EA431A1E9494AD759B8163A3622357CFB31718912190C822DBC521F7EFEDA7647AEA6A281C46D405B4E
解密后=测试解密内容,随便什么都行

各位看客可能不耐烦了,这有啥呀。确实,这个没有什么难度。问题在于前后端一致。
因为后端一般是java,java的算法原理是一样的,但是,调用方式和js不一样,这里就有坑的可能。很多人掉到坑里很久。
特别提醒。如果解密时给的key不对,或者给的密文不对,js会抛出异常。所以如果正式使用,一定要捕获异常

好吧,现在看后端代码

后端java代码

首先需要引入几个库

import javax
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值