不要再问我加密的问题了,使用crypto-js中的AES加密方法,连续多次加密/解密,注意事项

news2024/12/24 21:24:01

每日鸡汤,每个你想要学习的念头,都是未来的你向自己求救

需求:有一段字符串text,有3个key,后端用这三个key一次加密;然后把加密后的字符串返回给前端,前端用这3个key依次解密,得到原始的text.【本篇文章我们加密/解密 都用crypto-js来实现】

这里面有两个重要的知识点

1. 加密 和 解密 过程中 key,字符串的长度需要是16的倍数,否则解密不出来

2. 加密 和 解密 过程中 key,应该用 CryptoJS.enc.Utf8.parse(key) 解析一下。

否则会出现这篇文章所说的问题,相同的text/key,每次加密的结果不同

3. 在第一次加密之后的结果调用toString()得到text1,要进行第二次加密时,需要使用 CryptoJS.enc.Base64.parse(text1) 解析一下,再进行下一步

4. 在第一次解密之后的结果调用toString(CryptoJS.enc.Base64)【这是因为在加密的时候使用了base64解析】,得到decrypt1;再进行下一次解密,最后一次调用toString(CryptoJS.enc.Utf8)【这是因为加密的字符串是utf8格式】

import AES from 'crypto-js/aes'
import CryptoJS from 'crypto-js'

function test() {
	const text = '你好啊'
	const key1 = '1111111111111111'
	const key2 = '2222222222222222'
	const key3 = '3333333333333333'

	console.log('需要加密的字符串', text)
	// 开始加密
	const encrypt1 = AES.encrypt(text, CryptoJS.enc.Utf8.parse(key1), {
		iv: CryptoJS.enc.Utf8.parse(key1),
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
	}).toString()
	console.log('------加密------')
	console.log(11111, encrypt1)

	const encrypt2 = AES.encrypt(CryptoJS.enc.Base64.parse(encrypt1), CryptoJS.enc.Utf8.parse(key2), {
		iv: CryptoJS.enc.Utf8.parse(key2),
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
	}).toString()
	console.log(22222, encrypt2)

	const encrypt3 = AES.encrypt(CryptoJS.enc.Base64.parse(encrypt2), CryptoJS.enc.Utf8.parse(key3), {
		iv: CryptoJS.enc.Utf8.parse(key3),
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
	}).toString()
	console.log(333333, encrypt3)

	console.log('-----解密------')
	// 开始解密
	const decrypt3 = AES.decrypt(encrypt3, CryptoJS.enc.Utf8.parse(key3), {
		iv: CryptoJS.enc.Utf8.parse(key3),
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
	}).toString(CryptoJS.enc.Base64)
	console.log(44444, decrypt3)

	const decrypt2 = AES.decrypt(decrypt3, CryptoJS.enc.Utf8.parse(key2), {
		iv: CryptoJS.enc.Utf8.parse(key2),
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
	}).toString(CryptoJS.enc.Base64)
	console.log(555555, decrypt2)

	const decrypt1 = AES.decrypt(decrypt2, CryptoJS.enc.Utf8.parse(key1), {
		iv: CryptoJS.enc.Utf8.parse(key1),
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
	}).toString(CryptoJS.enc.Utf8)
	console.log(666666, decrypt1)
}
test()

我们再来看一下,其他的重点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剖析:在线帮助中心对企业能够起到什么作用?

随着互联网技术的不断发展和普及,越来越多的企业开始将自己的业务转移到了线上。这种转移不仅能够大幅度提高企业的效率,还能够让企业的服务更加贴近用户的需求。然而,在线服务也存在着一些问题,比如用户可能会遇到一些困难&#…

大人,时代变了!缺少成本票可不能买发票啊,是有办法的!

业务是流程,财税是结果,税收问题千千万,关注《税算盘》来帮你找答案。 企业所得税和增值税一样,都是我国重要的税收之一。企业所得税征收对象为企业的利润部分,再度细分就与企业的成本票有关。 企业所得税高是如今众…

电商系统分类树查询功能优化方案总结

前言 分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中。 但就是这样一个简单的分类树查询功能,我们却优化了5次。 到底是怎么回事呢? 背景 我们的网站使用了SpringBoot推荐的模板引擎:Thymelea…

案例5:Java大学生创新创业项目管理设计与实现任务书

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

RK3568|3588|3566处理器属于什么档次?

随着科技的迅猛发展,处理器作为计算机和电子设备的核心组件,其性能的提升对于设备的功能和用户体验起着至关重要的作用。在处理器市场中,不同的处理器被划分为不同的档次,以便用户能够更好地选择适合自己需求的产品。那么&#xf…

解决git clone与git push出现的若干问题:Failed to connect to github.com port 443: Timed out

1 连接github失败问题汇总:Failed to connect to github.com port 443: Timed out 1.1 解决ping不通github.com的问题 1.1.1 查询github的IP的地址 在以下链接找到网页显示github的ip地址http://github.global.ssl.fastly.net.ipaddress.com/,如图所示…

FSW26现金回收RS FSW43 信号和频谱分析仪

Rohde & Schwarz FSW26信号和频谱分析仪,2 Hz - 26.5 GHz 高性能 Rohde & Schwarz (R&S) FSW26 信号和频谱分析仪专为方便、准确和快速而设计。其独特的触摸屏、直观的多视图结果显示和优化的用户指南使 R&S FSW26 分析仪的操作高效方便。凭借其无…

玩转ChatGPT:AskYourPDF插件尝鲜

一、写在前面 首先,吐槽一下,感觉被CloseAI耍了: 上周发文说这一周对PLUS开放联网和插件功能,搞得网络一片狂欢。但是今天通过身边统计学发现,开通了PLUS后,拥有联网和插件功能的只是少数(而且…

TCP连接不释放,应用产生大量CLOSE_WAIT状态TCP

一、起源 23年元旦期间,大家都沉浸在一片祥和的过节气氛当中。 “滴滴滴”,这头同事的电话响起,具体说些什么我也没太在意,但见同事接完电话之后展现出了一副懊恼夹杂着些许不耐烦的表情。 我不解问道:“怎么了&…

扇区(sector),块(block),簇(cluster)

1.硬盘(可以认为硬盘就是磁盘) # fdisk -l Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes 255 heads, 63 sectors/track, 17844 cylinders Units cylinders of 16065 * 512 8225280 bytes 可以看到几个名词:heads/sectors/cylinders,分别就是磁…

altium Designer22 AD22 CAD电子绘图员三级知识点操作说明

文章目录 AD22一、解决局域网中多台电脑冲突:禁用license的网络功能二、添加库文件三、库的使用四、库绘制1、原理图库绘制2、PCB封装库绘制 五、动态标题栏六、原理图模板的使用七、层次电路图设计1、在母图上放置页面符2、给sheet symbol添加Entry,名字与子图原理…

案例4:Java宠物管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

后端返回文件流,前端实现点击按钮自动导出Excel文件

首先封装接口,此接口需要传Excel目标数据中的主键id,注意要加上responseType: blob import request from /utils/request; const prefix xxxxx /test;export async function exportExcel(id: any) {return request(prefix /export-excel/ id,{metho…

同科医药×实在智能丨数字员工“进驻”上市企业,让健康服务更近、更快、更优惠!

数字化浪潮构成了新世界跳动的脉搏,在医药行业转型的大环境下,实现数字化升级已经成为医药企业走向未来、拓展全球市场的必由之路。 近日,济南同科医药物流有限公司(简称“同科医药”,系同科股份全资子公司&#xff0c…

用“平面两点距离”求三角形面积及多边形面积

大于 32 边的多边形,都可以任一顶点发出的边切分为 n-2 个三角形。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址&#…

IIC通信理解

前言 就个人对IIC通信的理解,通过用图文的方式,尽量简洁的记录下此文。希望能对大家理解IIC通信协议有所帮助。 理解IIC 对于IIC协议的理解,我个人是将完整的IIC时序协议,分成六大块理解。分别是开始条件,结束条件,发送字节,发送字…

数智赋能,专精特新 | 数说故事揽获多项荣誉认定

迈进2023崭新的节点, 数说故事秉持着数据驱动智能决策的使命, 专精特新,砥砺深耕, 拥抱大模型,算法技术迈上新台阶; 推陈出新,产品线持续迭代升级; 以行业领先的技术、专业的数…

基础IO(三)

软硬链接和动静态库 1.软硬链接2.动态库和静态库2.1理解现象2.2静态库的设计2.3动态库2.4动态库的配置2.5动态库的理解 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏:【Linux…

Kafka中时间轮算法的使用

简介: Kafka的心跳处理机制竟然用到了时间轮算法? Broker端与客户端的心跳在Kafka中非常的重要,因为一旦在一个心跳过期周期内(默认10s),Broker端的消费组组协调器(GroupCoordinator)会把消费者从消费组中移除,从而触…

U盘数据丢失怎么恢复?优盘数据恢复,看这4个方法!

案例:U盘数据丢失怎么恢复? 【我的U盘里真的存了很多重要的视频和图片,但是前段时间U盘好像中病毒了,导致我很多的图片都丢失了!大家有什么好方法可以帮我恢复U盘中的重要数据吗?真的超级感谢!…