AES Android IOS H5 加密方案
前景:
1、本项目原有功能RSA客户端对敏感信息进行加密
2、本次漏洞说是服务端返回值有敏感信息,需要密文返回
3、最初只跟H5联调成功,后续APP联调失败(H5和APP的需求排期不一致),没关注到通用性
方案:
本次方案不算完美,还是有被劫持篡改的风险,但基本https证书认证加持,风险相对较小
客户端本地存需要存三个值:
1、RSA公钥
2、随机生成16个字符
3、AES偏移量

java加密
安卓同服务端代码
@Slf4j
public class AESClientUtils {private static final String AES = "AES";private static final String STRING_FORMAT = "UTF-8";private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";//定义一个初始向量的值 AES偏移量,客户端和服务端保持统一值private static final String IV_STRING = "9999543210123666";/*** 加密** @param aesKey AESkey* @param content 明文* @return 密文*/public static String encrypt(String aesKey, String content) {try {byte[] byteContent = content.getBytes(STRING_FORMAT);// 注意,为了能与 iOS 统一 这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成byte[] enCodeFormat = aesKey.getBytes();SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, AES);byte[] initParam = IV_STRING.getBytes();IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);// 指定加密的算法、工作模式和填充方式Cipher cipher = Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);byte[] encryptedBytes = cipher.doFinal(byteContent);// 同样对加密后数据进行 base64 编码return Base64Utils.encode(encryptedBytes);} catch (Exception e) {log.error("AES Client 加密失败 content={},encodeRules={}", content, aesKey, e);return null;}}/*** 解密** @param aesKey AESkey* @param content 密文* @return 解密后的明文*/public static String decrypt(String aesKey,String content) {try {Base64.Decoder decoder = Base64.getDecoder();byte[] encryptedBytes = decoder.decode(content);byte[] enCodeFormat = aesKey.getBytes();SecretKeySpec secretKey = new SecretKeySpec(enCodeFormat, AES);byte[] initParam = IV_STRING.getBytes();IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);Cipher cipher = Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);byte[] result = cipher.doFinal(encryptedBytes);return new String(result, STRING_FORMAT);} catch (Exception e) {log.error("AES Client 解密失败 content={},encodeRules={}", content, aesKey, e);return null;}}}
H5解密
var iv = "9999543210123666";
const ciphertext = response.data.info[ele]//保存本地的随机生成的16字节密钥const key = CryptoJS.enc.Utf8.parse(sessionStorage.getItem('key')) //AES的偏移量const iv = CryptoJS.enc.Utf8.parse('9999543210123666')// 解密const bytes = CryptoJS.AES.decrypt(ciphertext, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,})// 解密后,需要将解密后的字符串转成UTF-8格式response.data.info[ele] = bytes.toString(CryptoJS.enc.Utf8)
IOS解密
先定义一个初始向量的值
NSString *const kInitVector = @"9999543210123666"
确定密钥长度,这里选择 AES-128。
size_t const kKeySize = kCCKeySizeAES128
+ (NSString *)decryptAES:(NSString *)content key:(NSString *)key {// 把 base64 String 转换成 DataNSData *contentData = [[NSData alloc] initWithBase64EncodedString:content options:NSDataBase64DecodingIgnoreUnknownCharacters];NSUInteger dataLength = contentData.length;char keyPtr[kKeySize + 1];memset(keyPtr, 0, sizeof(keyPtr));[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];size_t decryptSize = dataLength + kCCBlockSizeAES128;void *decryptedBytes = malloc(decryptSize);size_t actualOutSize = 0;NSData *initVector = [kInitVector dataUsingEncoding:NSUTF8StringEncoding];CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,kCCAlgorithmAES,kCCOptionPKCS7Padding,keyPtr,kKeySize,initVector.bytes,contentData.bytes,dataLength,decryptedBytes,decryptSize,&actualOutSize);if (cryptStatus == kCCSuccess) {return [[NSString alloc] initWithData:[NSData dataWithBytesNoCopy:decryptedBytes length:actualOutSize] encoding:NSUTF8StringEncoding];}free(decryptedBytes);return nil;
}
相关文章:
AES Android IOS H5 加密方案
前景: 1、本项目原有功能RSA客户端对敏感信息进行加密 2、本次漏洞说是服务端返回值有敏感信息,需要密文返回 3、最初只跟H5联调成功,后续APP联调失败(H5和APP的需求排期不一致),没关注到通用性 方案: 本次方案不…...
一文了解变阻器和电位器的定义、原理、应用及其对比
变阻器的定义 两端可变电阻器(称为变阻器)利用电阻来调节电流。电阻丝环绕在陶瓷或瓷器等绝缘芯上。当刮水器沿着电阻丝移动时,电路的有效电阻会发生变化。因此,它提供了精确的电流控制。调光器、电机速度控制器和加热元件使用变…...
WPF实现一个带旋转动画的菜单栏
WPF实现一个带旋转动画的菜单栏 一、创建WPF项目及文件1、创建项目2、创建文件夹及文件3、添加引用 二、代码实现2.ControlAttachProperty类 一、创建WPF项目及文件 1、创建项目 打开VS2022,创建一个WPF项目,如下所示 2、创建文件夹及文件 创建资源文件夹&…...
使用Dockerfile构建镜像
目录 1.使用Dockerfile构建tomcat镜像 1.1 通过ARG传参构建不同版本的tomcat 2.缩小镜像的体积大小 2.1 使用较小体积的基础镜像 2.2 多级构建减少体积 1.使用Dockerfile构建tomcat镜像 cd /opt mkdir tomcat cd tomcat/ 上传tomcat所需的依赖包 使用tar xf 解压三个压缩…...
概率论原理精解【3】
文章目录 向量值向量值函数导数对称矩阵定义性质例子应用 向量值理论基础定义性质应用示例 向量值函数的导数定义性质应用 向量值 向量值函数导数 D n ⊂ R n , 向量值函数 f : D n → R m D^n \subset R^n,向量值函数f:D^n\rightarrow R^m Dn⊂Rn,向量值函数f:Dn→Rm 1. 向量…...
[C/C++入门][循环]14、计算2的幂(2的n次方)
计算2的幂(即2的n次方)非常经典。你懂几种方法呢?很多人只会一种,我们来分析一下。 可以通过多种方式实现: 1、最简单的方法之一是使用位运算符<<,它本质上是在二进制表示下对2进行左移操作&#x…...
RPC与服务的注册发现
文章目录 1. 什么是远程过程调用(RPC)?2. RPC的流程3. RPC实践4. RPC与REST的区别4.1 RPC与REST的相似之处4.2 RPC与REST的架构原则4.3 RPC与REST的主要区别 5. RPC与服务发现5.1 以zookeeper为服务注册中心5.2 以etcd为服务注册中心 6. 小结参考 1. 什么是远程过程调用(RPC)?…...
3112. 访问消失节点的最少时间 Medium
给你一个二维数组 edges 表示一个 n 个点的无向图,其中 edges[i] [ui, vi, lengthi] 表示节点 ui 和节点 vi 之间有一条需要 lengthi 单位时间通过的无向边。 同时给你一个数组 disappear ,其中 disappear[i] 表示节点 i 从图中消失的时间点࿰…...
FastAPI 学习之路(五十二)WebSockets(八)接受/发送json格式消息
前面我们发送的大多数都是text类型的消息,对于text消息来说,后端处理出来要麻烦的多,那么我们可以不可以传递json格式的数据,对于前后端来说都比较友好,答案是肯定的,我们需要做下处理。 首先,…...
Go语言并发编程-案例_3
案例 并发目录大小统计 业务逻辑 统计目录的文件数量和大小(或其他信息)。示例输出: // 某个目录:2637 files 1149.87 MB 实现思路 给定一个或多个目录,并发的统计每个目录的size,最后累加到一起。 当…...
pikachu之跨站脚本攻击(x‘s‘s)
1get型 输入a看一下 接着输入<a> 发现<>没有被过滤当做标签处理了 尝试在表单提交的框里面,输入xss语句 尝试输入<script>alert(1)</script> 发现有长度限制 因为这里是get请求 get请求的特点是:传参是在url中的 所以我们可以在…...
Qt模型/视图架构——委托(delegate)
一、为什么需要委托 模型(model)用来数据存储,视图(view)用来展示数据。因此,模型/视图架构是一种将数据存储和界面展示分离的编程方法。具体如下图所示: 由图可知,模型向视图提供数…...
python3.11SSL: SSLV3_ALERT_HANDSHAKE_FAILURE
参考:python request包 版本不兼容 报错sslv3 alert handshake failure 解决方法-CSDN博客 修改:Python311\Lib\site-packages\urllib3\util\ssl_.py 新版本3.11里默认没有DEFAULT_CIPHERS 补回来: #__imported from 3.6.8 # A secure default. # So…...
[深度学习]基于yolov10+streamlit目标检测演示系统设计
YOLOv10结合Streamlit构建的目标检测系统,不仅极大地增强了实时目标识别的能力,还通过其直观的用户界面实现了对图片、视频乃至摄像头输入的无缝支持。该系统利用YOLOv10的高效检测算法,能够快速准确地识别图像中的多个对象,并标注…...
开源模型应用落地-FastAPI-助力模型交互-进阶篇(三)
一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理,使应用程序能够处理各种不同的请求场景,提高应用程序的灵活性和可扩展性。 在数据验证和转换方面,高级用法提供了更精细和准确的控制&#…...
机器人及其相关工科专业课程体系
机器人及其相关工科专业课程体系 前言传统工科专业机械工程自动化/控制工程计算机科学与技术 新兴工科专业智能制造人工智能机器人工程 总结Reference: 前言 机器人工程专业是一个多领域交叉的前沿学科,涉及自然科学、工程技术、社会科学、人文科学等相关学科的理论…...
C#数字医学影像系统(RIS/PACS)源码,Oracle数据库,C/S架构,运行稳定
数字医学影像系统(RIS/PACS)源码,三甲以下的医院都能满足。PACS 系统全套成品源码。 开发技术:C/S架构,C#开发语言,数据库服务器采用Oracle数据库。 医学影像存储与传输系统,融合了医学信息化…...
Spring-Boot基础--yaml
目录 Spring-Boot配置文件 注意: YAML简介 YAML基础语法 YAML:数据格式 YAML文件读取配置内容 逐个注入 批量注入 ConfigurationProperties 和value的区别 Spring-Boot配置文件 Spring-Boot中不用编写.xml文件,但是spring-Boot中还是存在.prope…...
C/C++蓝屏整人代码
文章目录 📒程序效果 📒具体步骤 1.隐藏任务栏 2.调整cmd窗口大小 3.调整cmd窗口屏幕颜色 4.完整代码 📒代码详解 🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主&a…...
【Android安全】Ubuntu 下载、编译 、刷入Android-8.1.0_r1
0. 环境准备 Ubuntu 16.04 LTS(预留至少95GB磁盘空间,实测占94.2GB) Pixel 2 XL 要买欧版的,不要美版的。 欧版能解锁BootLoader、能刷机。 美版IMEI里一般带“v”或者"version",这样不能解锁BootLoader、…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
