当前位置: 首页 > news >正文

前端微信小程序AES加密解密踩坑

项目场景:

今天蛮沮丧的,在和别人对接的时候aes加解密的时候踩了坑。今天有个同事请假了,所以本来他和别人对接的活,老大给了我,然后我就正式踏上了战战兢兢的对接之路。

1.一开始的时候对面先是问用的啥加密方法。这个我记得当时做的时候我就在旁边还问我了的,AES。顺利答出。
2.然后对面又问要key和偏移量,key我知道,偏移量是什么鬼,然后去百度了一下,一个叫IV的东西,对加密有点了解脑子里大概知道是做啥用的了,去找了一下还真有,key,iv都发过去了。还算顺利

问题描述

到这里应该都结束了。哪曾想对面拿到这两个东西,解密还是解不了,解密返回的是空。

原因分析:

然后我就开始找原因
①我先是试了一下我本地加密解密,ok没有问题
②我又试了一下在密文前面加空格然后解密,返回的是空,那是不是就是这个原因呢,发给对面让对面把空格去了试试,好还是不行
③然后就是半个多小时过去,对面看我久久不回,把解密的方法发给了我,我看了一下和我这边差别不大,唯一有差别的就是
对面的key是我发的字符串
在这里插入图片描述

,而我这边的key是生成的
在这里插入图片描述
有没有可能是两个不一样呢,我把两个都输出比较了一下都一样的没问题看起来都是字符串。这是我踩的第一个坑。
然后呢,不信自己的眼睛又用了一下key == key1 输出了一下true,也没问题呀。这是我踩的第二个坑。被两个坑给埋了。

最后问同事,同事试了一下也愣住了,然后我给他展示了一下我用key == key1是true ,他让我试试 key === key1,一输出false,好这个时候原因很明显了,我又用typeof key,输出了是object,好家伙。
至于key == key1为什么是true,我想大概是对象的toString方法,让他输出了和key1相等的字符串

解决方案:

最后最后我把对面晾了两个多小时,对面让我把生成密钥的盐值,密码短语,KEY_SIZE,ITERATION_COUNT都发给他,自己生成密钥去了。

虽然问题解决了,但是还是要探讨一下有密钥了,这个key到底应该怎么写。我的chat今天下午竟然罢工了,不然问一下应该很快就能解决(顺便吐槽一下国内的大模型真lj,根本比不了),目前还用不了,先记录一下,等能用了我再问问。


回来填坑
直接这么写不行
在这里插入图片描述
然后这样写

var key2 = CryptoJS.enc.Utf8.parse("asdfasdfsadfsadfasdf");

输出了一下
在这里插入图片描述
用这个key2解密还是不行,一样返回为空

突发奇想又把正确的key输出了一下
在这里插入图片描述

哦,很明显问题出来了,比正确的key长,问问chat老师

User
还是key不对,var key =
CryptoJS.enc.Utf8.parse(“222d95e87666d9eed4429e0a2daa39a8”);
生成的key,array是8,正确应该是5?

在你提到的情况下,密钥的生成可能存在问题。AES 的密钥长度应该是 128 位(16 字节),192 位(24 字节)或 256 位(32
字节)。你提到生成的密钥数组长度为 8,这不符合标准的 AES 密钥长度。

如果你的密钥是 32 位的十六进制字符串,你可以使用 CryptoJS.enc.Hex.parse
来解析为字节数组。确保使用正确的密钥长度,可以根据需要截断或补齐。例如:

javascript Copy code // 如果密钥是 32 字节的十六进制字符串 var keyHex =
“222d95e87666d9eed4429e0a2daa39a8”; var key =
CryptoJS.enc.Hex.parse(keyHex); 上述代码将 32
字节的十六进制字符串解析为字节数组,然后你可以将其用作密钥。

确保你的密钥长度正确,并尽量不要硬编码密钥,因为密钥的保密性非常重要。最好的做法是将密钥存储在安全的地方,而不是在代码中硬编码。如果你需要使用密码来派生密钥,可以考虑使用密码学上的密钥派生函数(如
PBKDF2)。

User
和CryptoJS.enc.Utf8.parse(“222d95e87666d9eed4429e0a2daa39a8”);有什么区别

在 CryptoJS 中,CryptoJS.enc.Utf8.parse 和 CryptoJS.enc.Hex.parse
是两个不同的方法,用于解析字符串并生成对应的字节数组。

CryptoJS.enc.Utf8.parse:

该方法将 UTF-8 编码的字符串转换为字节数组。 适用于包含文本字符的字符串。
例如:CryptoJS.enc.Utf8.parse(“Hello, World!”) 会生成一个包含每个字符的 UTF-8
编码的字节数组。 CryptoJS.enc.Hex.parse:

该方法将十六进制字符串转换为字节数组。 适用于包含十六进制字符的字符串,每两个字符表示一个字节。
例如:CryptoJS.enc.Hex.parse(“48656c6c6f2c20576f726c6421”) 会生成一个字节数组,对应于
ASCII 编码的 “Hello, World!”。 在你的情况下,你提到密钥是一个 32 位的十六进制字符串:

javascript Copy code var key =
CryptoJS.enc.Hex.parse(“222d95e87666d9eed4429e0a2daa39a8”); 这里使用了
CryptoJS.enc.Hex.parse,因为你提供的密钥是一个十六进制字符串。这样可以确保正确地将这个字符串转换为字节数组,以便在
CryptoJS 的 AES 加密和解密过程中使用。

如果密钥是一个普通的文本字符串,而不是十六进制,你应该使用 CryptoJS.enc.Utf8.parse。

总的来说,选择使用哪个方法取决于你的密钥的表示形式。如果密钥是十六进制字符串,使用
CryptoJS.enc.Hex.parse;如果是普通文本字符串,使用
CryptoJS.enc.Utf8.parse。在加密和解密的过程中,确保使用相同的格式来处理密钥。

总结一下喽如果想要把key直接写出来得把密钥写成十六进制的字符串

var key = 	CryptoJS.enc.Hex.parse("asdfasdfsadfsadfasdf");

相关文章:

前端微信小程序AES加密解密踩坑

项目场景: 今天蛮沮丧的,在和别人对接的时候aes加解密的时候踩了坑。今天有个同事请假了,所以本来他和别人对接的活,老大给了我,然后我就正式踏上了战战兢兢的对接之路。 1.一开始的时候对面先是问用的啥加密方法。这…...

代码随想录算法训练营第五十八天| 739 每日温度 496 下一个更大元素 |

目录 739 每日温度 496 下一个更大元素 | 739 每日温度 求后面第一个比他大的元素的位置&#xff0c;单调栈如果递增 求后面第一个比他小的元素的位置&#xff0c;单调栈需要递减 class Solution { public:vector<int> dailyTemperatures(vector<int>& tempe…...

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一&#xff08;全局&#xff09; 解决方案二&#xff08;单个字段&#xff09; 配置自定义RedisTe…...

华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录

目录 一、环境搭建 二、第一次登录USG6000V防火墙&#xff0c;即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…...

css图片属性,图片自适应

CSS 图片属性指南&#xff1a;background-size 和 object-fit 在前端开发中&#xff0c;使用图片是非常常见的。为了让图片在网页中显示得更好&#xff0c;CSS 提供了多种属性来调整和控制图片的大小和布局。其中&#xff0c;background-size 和 object-fit 是两个常用的属性&a…...

【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类

数据之舞&#xff1a;Python数据科学库横扫全场 前言 在当今数据驱动的时代&#xff0c;Python成为数据科学家和分析师的首选工具之一。本文将介绍一系列强大的Python库&#xff0c;涵盖了数据处理、可视化、机器学习和自然语言处理等领域。无论你是初学者还是经验丰富的数据…...

【数据结构和算法】最大连续1的个数 III

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一&#xff1a;滑动窗口 四、…...

AngularJS

理解实现代码的逻辑为主要&#xff0c;代码怎么写为次要。 参考资料&#xff1a; 《AngularJS入门与进阶》&#xff0c;江荣波著 前端开发常用框架 React&#xff1a;由Facebook开发&#xff0c;用于构建用户界面的JavaScript库&#xff0c;以组件化和虚拟DOM著称。 Angular&…...

初级数据结构(七)——二叉树

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;六&#xff09;——堆 | NULL 下一篇-> 1、写在前面 二叉树的基本概念在《初级数据结构&#xff08;五&#xff09;——树和二叉树的概念》中已经介绍得足够详细了。上一…...

对比学习综述

1.简介 2.相关工作 2.1、Inst Disc 代理任务&#xff1a;个体判别。把每一个图片看作是一种类别&#xff0c;把每一个图片都区分开来。 正负样本选择&#xff1a;正样本是图片本身&#xff0c;负样本是数据集里的其他图片&#xff0c;该文章从memory bank中随机抽取4096个负…...

R语言【cli】——cli_warn可以更便捷的在控制台输出警告信息

Package cli version 3.6.2 cli_warn(message, ..., .envir parent.frame()) 参数【message】&#xff1a;它是通过调用 cli_bullets() 进行格式化的。进一步地&#xff0c;还需要调用 inline-makeup&#xff08;内联标记&#xff09;。 参数【...】&#xff1a;传递给 rlan…...

从零开始创建GPTs 人人都可以编写自己的ChatGPT产品

在这个人工智能迅猛发展的时代&#xff0c;GPT&#xff08;生成式预训练变换器&#xff09;已经成为一项令人兴奋的技术&#xff0c;它打开了创意和知识的新大门。无论你是一名编程新手、一位热爱探索的学生&#xff0c;还是对未来充满好奇的专业人士&#xff0c;GPTs都可以为你…...

人工智能对网络安全的影响

技术的快速发展带来了不断增长的威胁环境&#xff0c;网络犯罪分子和恶意行为者利用我们互联世界中的漏洞。在这个数字时代&#xff0c;数据泄露和网络攻击呈上升趋势&#xff0c;仅靠传统的安全措施已经不够了。人工智能 &#xff08;AI&#xff09; 的进步彻底改变了网络安全…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextInput输入框组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextInput输入框组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、TextInput 接口 TextInput(value?:{placeholder?: ResourceStr, tex…...

【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]

阅读导航 引言一、Mutex的简介二、Mutex的种类1. std::mutex &#xff08;基本互斥锁&#xff09;2. std::recursive_mutex &#xff08;递归互斥锁&#xff09;3. std::timed_mutex &#xff08;限时等待互斥锁&#xff09;4. std::recursive_timed_mutex &#xff08;限时等待…...

安全狗云原生安全-云甲·云原生容器安全管理系统

随着云计算的快速发展&#xff0c;容器技术逐渐成为主流。然而&#xff0c;随着容器的普及&#xff0c;安全问题也日益突出。为了解决这一问题&#xff0c;安全狗推出了云原生容器安全管理系统——云甲。 云甲是安全狗云原生安全的重要组成部分&#xff0c;它采用了先进的云原生…...

Python 学习路线:介绍、基础语法、数据结构、算法、高级主题、框架及异步编程详解

Python 介绍 Python 是一种 高级 的、解释型 的、通用 的编程语言。其设计哲学强调代码的可读性&#xff0c;使用显著的缩进。Python 是 动态类型 和 垃圾收集 的。 基本语法 设置 Python 环境并开始基础知识。 文章链接&#xff1a;Python 安装与快速入门 变量 变量用于…...

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI+Vant 电影院订票管理系统 的设计与实现

一.项目介绍 基于SpringBootVue 电影院订票管理系统 分为前端和后端。 前端&#xff08;用户&#xff09;&#xff1a; 登录后支持查看首页、电影、影院和我的信息 支持查看正在热映和即将上映的电影信息 支持购票&#xff08;需选择影院座位&#xff09;、看过&#xff08;评论…...

轻量级购物小程序H5产品设计经典样例

主要是看到这个产品设计的不错值得借鉴特记录如下&#xff1a; 不过大多数购物app都大致相同&#xff0c;这个算是经典样例&#xff0c;几乎都可以复制&#xff0c;我第一次使用&#xff0c;感觉和顺畅。看上去产品是经过打磨的&#xff0c;布局非常好。内容也很丰富。支持异业…...

final, finally, finalize 的区别?

1.final 用于声明属性&#xff0c;方法和类&#xff0c;分别表示属性不可变&#xff0c;方法不可覆盖&#xff0c;类不可继承。 内部类要访问局部变量&#xff0c;局部变量必须定义成 final 类型 2.finally 是异常处理语句结构的一部分&#xff0c;表示总是执行 3.finalize …...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...