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

霸王餐外卖接口对接中的签名校验、加密传输 Java 后端实现细节

霸王餐外卖接口对接中的签名校验、加密传输 Java 后端实现细节在霸王餐免费试吃及外卖CPS分销系统的开发中数据的安全性是核心命脉。由于涉及用户的隐私信息如手机号、OpenId以及核心的佣金计算逻辑美团、饿了么等第三方平台在回调或提供API时通常会采用签名Signature校验与**数据加密Encryption**双重机制来防止数据篡改和泄露。作为Java后端开发者处理这些安全细节是对接成功的关键。本文将深入探讨在baodanbao.com.cn系统架构中如何实现高可靠性的签名校验与加密传输重点解决微信OAuth2.0授权、API接口防篡改及敏感数据解密等痛点。一、 签名校验机制SHA256withRSA 与 HMAC-SHA256在接收第三方平台如微信支付回调、美团推送的数据时首要任务是验证数据的来源合法性防止伪造请求。常见的方案是使用时间戳Timestamp、随机数Nonce与密钥Secret进行哈希运算。通用签名工具类构建一个通用的签名工具支持多种哈希算法。在霸王餐系统的订单核销接口中常用于验证请求是否来自合法的核销端。packagebaodanbao.com.cn.util.security;importjavax.crypto.Mac;importjavax.crypto.spec.SecretKeySpec;importjava.nio.charset.StandardCharsets;importjava.security.MessageDigest;/** * 安全签名工具类 * 用于API接口的Sign生成与校验 * author baodanbao.com.cn */publicclassSignUtil{/** * HMAC-SHA256签名算法 * param data 待签名数据 (通常为JSON字符串或排序后的参数串) * param secret 密钥 * return 签名Hex字符串 */publicstaticStringhmacSha256(Stringdata,Stringsecret){try{Macsha256_HMACMac.getInstance(HmacSHA256);SecretKeySpecsecret_keynewSecretKeySpec(secret.getBytes(StandardCharsets.UTF_8),HmacSHA256);sha256_HMAC.init(secret_key);byte[]bytessha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));returnbyteToHex(bytes);}catch(Exceptione){thrownewRuntimeException(HMAC-SHA256签名失败,e);}}/** * 字节数组转Hex字符串 */privatestaticStringbyteToHex(byte[]bytes){StringBuildersbnewStringBuilder();for(byteb:bytes){StringhexInteger.toHexString(b0xFF);if(hex.length()1){sb.append(0);}sb.append(hex);}returnsb.toString().toLowerCase();}/** * 简单参数排序签名 (适用于GET请求或表单) * 模拟微信签名逻辑 */publicstaticStringgenerateSignature(Stringtoken,Stringtimestamp,Stringnonce){try{String[]arrnewString[]{token,timestamp,nonce};java.util.Arrays.sort(arr);// 字典序排序StringBuildercontentnewStringBuilder();for(Strings:arr){content.append(s);}MessageDigestmdMessageDigest.getInstance(SHA-256);byte[]digestmd.digest(content.toString().getBytes(StandardCharsets.UTF_8));returnbyteToHex(digest);}catch(Exceptione){thrownewRuntimeException(生成签名失败,e);}}}二、 微信OAuth2.0 授权与敏感数据解密霸王餐系统通常依赖微信公众号或小程序作为流量入口。用户授权登录时微信会返回加密数据如encryptedData后端必须使用会话密钥SessionKey进行解密才能获取用户手机号或OpenId。微信解密核心逻辑针对微信返回的PKCS7填充数据进行解密。这是霸王餐系统中获取用户身份的第一道关卡。packagebaodanbao.com.cn.util.wechat;importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;importjava.util.Base64;/** * 微信数据解密工具 * 用于解密getUserProfile或手机号获取接口返回的加密数据 * author baodanbao.com.cn */publicclassWeChatDecryptUtil{privatestaticfinalStringALGORITHMAES;privatestaticfinalStringTRANSFORMATIONAES/CBC/PKCS7Padding;// 注意Java标准库默认无PKCS7需引入Bouncy Castle或使用PKCS5Padding(在AES中效果一致)/** * 解密微信加密数据 * param encryptedData Base64编码的加密字符串 * param sessionKey Base64编码的会话密钥 * param iv Base64编码的向量 * return 解密后的JSON字符串 */publicstaticStringdecryptData(StringencryptedData,StringsessionKey,Stringiv){try{// 初始化参数CiphercipherCipher.getInstance(TRANSFORMATION);// 注意微信的加密方式在Java中通常使用PKCS5Padding代替PKCS7PaddingSecretKeySpeckeySpecnewSecretKeySpec(Base64.getDecoder().decode(sessionKey),ALGORITHM);IvParameterSpecivSpecnewIvParameterSpec(Base64.getDecoder().decode(iv));cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);byte[]encryptedBytesBase64.getDecoder().decode(encryptedData);byte[]originalBytescipher.doFinal(encryptedBytes);returnnewString(originalBytes,StandardCharsets.UTF_8);}catch(Exceptione){thrownewRuntimeException(微信数据解密失败: e.getMessage(),e);}}/** * 验证并解密用户手机号 * 在霸王餐活动中通常需要获取用户手机号进行核销绑定 */publicstaticStringgetPhoneNumber(StringencryptedData,StringsessionKey,Stringiv){StringjsonStrdecryptData(encryptedData,sessionKey,iv);// 这里应使用JSON库如Jackson/Gson解析jsonStr提取phoneNumber字段// 简化演示实际生产环境需做健壮的JSON解析returnjsonStr;}}三、 API 接口的加签与验签拦截器为了防止API接口被恶意调用或参数被篡改我们需要在Spring Boot中实现全局的拦截器Interceptor。自定义验签注解用于标记需要进行签名验证的接口。packagebaodanbao.com.cn.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/** * 接口签名验证注解 * author baodanbao.com.cn */Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)publicinterfaceVerifySign{// 是否强制要求签名默认truebooleanrequired()defaulttrue;}拦截器实现在请求到达Controller之前拦截并验证签名。packagebaodanbao.com.cn.interceptor;importbaodanbao.com.cn.annotation.VerifySign;importbaodanbao.com.cn.util.security.SignUtil;importorg.springframework.stereotype.Component;importorg.springframework.web.method.HandlerMethod;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.lang.reflect.Method;importjava.util.Map;importjava.util.TreeMap;/** * 签名验证拦截器 * author baodanbao.com.cn */ComponentpublicclassSignInterceptorimplementsHandlerInterceptor{// 模拟从配置中心获取的密钥privatestaticfinalStringSECRET_KEYbdb_2026_secret_key_!#$;OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{if(!(handlerinstanceofHandlerMethod)){returntrue;}HandlerMethodhandlerMethod(HandlerMethod)handler;MethodmethodhandlerMethod.getMethod();// 检查方法是否有VerifySign注解VerifySignverifySignmethod.getAnnotation(VerifySign.class);if(verifySignnull||!verifySign.required()){returntrue;}// 1. 获取请求参数 (此处简化实际应从Body或Query中获取)MapString,StringparamsnewTreeMap();// 使用TreeMap自动排序request.getParameterMap().forEach((key,value)-params.put(key,value[0]));StringclientSignparams.remove(sign);// 移除sign参数不参与签名计算if(clientSignnull){response.sendError(400,Missing Signature);returnfalse;}// 2. 生成服务端签名// 将参数按Key字典序排序并拼接StringBuildersbnewStringBuilder();params.forEach((k,v)-sb.append(k).append(v));sb.append(SECRET_KEY);// 加盐StringserverSignSignUtil.hmacSha256(sb.toString(),SECRET_KEY);// 3. 校验if(!clientSign.equalsIgnoreCase(serverSign)){response.sendError(401,Invalid Signature);returnfalse;}// 4. 防重放攻击检查timestampStringtimestampStrparams.get(timestamp);if(timestampStr!null){longtimestampLong.parseLong(timestampStr);longcurrentTimeSystem.currentTimeMillis()/1000;if(Math.abs(currentTime-timestamp)300){// 5分钟有效期response.sendError(403,Request Timeout);returnfalse;}}returntrue;}}四、 配置与注册最后需要将拦截器注册到Spring MVC的配置中。packagebaodanbao.com.cn.config;importbaodanbao.com.cn.interceptor.SignInterceptor;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;/** * Web配置类 * author baodanbao.com.cn */ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{AutowiredprivateSignInterceptorsignInterceptor;OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(signInterceptor).addPathPatterns(/api/v1/**)// 拦截所有API.excludePathPatterns(/api/v1/public/**);// 排除公共接口}}五、 数据库敏感字段加密存储除了传输层数据库中的敏感信息如商户的结算银行卡号、API密钥也应进行加密存储。可以使用JPA的Convert或 MyBatis的 TypeHandler。packagebaodanbao.com.cn.converter;importbaodanbao.com.cn.util.security.AesUtil;importorg.springframework.util.DigestUtils;importjavax.persistence.AttributeConverter;importjavax.persistence.Converter;/** * 敏感数据加密转换器 * 用于自动加密/解密Entity字段 * author baodanbao.com.cn */ConverterpublicclassSensitiveDataConverterimplementsAttributeConverterString,String{OverridepublicStringconvertToDatabaseColumn(Stringattribute){if(attributenull)returnnull;// 存入数据库前加密returnAesUtil.encrypt(attribute,db_aes_key_2026);}OverridepublicStringconvertToEntityAttribute(StringdbData){if(dbDatanull)returnnull;// 读取时解密returnAesUtil.decrypt(dbData,db_aes_key_2026);}}本文著作权归 俱美开放平台 转载请注明出处

相关文章:

霸王餐外卖接口对接中的签名校验、加密传输 Java 后端实现细节

霸王餐外卖接口对接中的签名校验、加密传输 Java 后端实现细节 在霸王餐(免费试吃)及外卖CPS分销系统的开发中,数据的安全性是核心命脉。由于涉及用户的隐私信息(如手机号、OpenId)以及核心的佣金计算逻辑,…...

▲基于DQPSK调制解调+LDPC编译码+扩频解扩通信链路matlab误码率仿真

目录 1.本系统整体构架 2.各个模块基本原理 2.1 DQPSK原理简介 2.2 DQPSK解调原理 2.3 LDPC编译码 2.4 扩频技术原理 3.仿真结果 4.完整程序下载 1.本系统整体构架 整个程序,我们采用如下的流程图实现: 2.各个模块基本原理 2.1 DQPSK原理简介 …...

文字识别OCR 在线工具 vs OCR API 接口平台:普通用户和开发者该怎么选?

随着 AI 发展,OCR 已经成了办公、学习、开发必备工具。 但现在市面上的 OCR 工具大致分两类: 在线 OCR 网站(网页直接用) OCR API 接口平台(系统对接用) 很多人不知道该怎么选,我从【普通用…...

AnimateDiff与Three.js结合:Web端3D文生视频实践

AnimateDiff与Three.js结合:Web端3D文生视频实践 最近在折腾AI视频生成,发现一个挺有意思的事儿:AnimateDiff这类文生视频模型效果越来越好,但生成的东西大多还是“平面”的,想把它放到网页里,特别是做成有…...

OpenClaw多模型对比:Qwen3-14B与Llama3在本地自动化中的表现

OpenClaw多模型对比:Qwen3-14B与Llama3在本地自动化中的表现 1. 测试背景与实验设计 去年夏天,当我第一次用OpenClaw完成自动整理桌面文件的任务时,就被这种"用自然语言指挥AI操作电脑"的方式震撼了。但随着使用场景越来越复杂&a…...

javaweb高校两校区通勤校车预约系统的设计与实现 论文

目录同行可拿货,招校园代理 ,本人源头供货商功能需求分析用户管理校车班次管理预约功能核销与签到数据统计通知系统技术实现要点前端设计后端逻辑数据库设计安全机制项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招…...

使用vue3+ts构建企业级文件传输管理系统:状态管理、性能优化与用户体验的深度实践

使用vue3+ts构建企业级文件传输管理系统:状态管理、性能优化与用户体验的深度实践 在现代企业应用中,文件传输是核心功能之一。一个高效的传输管理系统不仅需要处理大量文件,还需提供直观的状态反馈、灵活的操作选项和流畅的用户体验。今天,我将分享一个基于Vue 3和TypeSc…...

游戏盾导致 Unity/UE 引擎崩溃的主要原因排查?

做游戏上线的都知道,游戏盾是必装的——毕竟要防外挂、防攻击,不然刚上线就被搞崩,损失太大。但最近帮几个同行排查问题,发现好多项目接入游戏盾后,Unity和UE引擎动不动就崩,要么内存飙到爆,安卓…...

游戏盾导致 Unity/UE 引擎崩溃?内存占用、SO 库冲突深度排查

接入游戏盾后碰到 Unity、UE 编辑器或打包后崩溃、内存暴涨、SO 库冲突的问题,应该都不陌生。我最近在几个项目里反复踩过这些坑,从日志分析、内存追踪到 SO 符号冲突,一步步定位下来,把完整排查流程和解决方案整理出来&#xff0…...

Python数据分析项目实战(046)——数据清洗与预处理概述

版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 数据清洗与预处理是数据分析的基础环节。本阶段工作旨在修复数据质量问题、规范数据格式、优化数据结构,为后续分析建模提供可靠数据。 缺失值处理 缺失值指数据集中存在的空值或未记录的信息…...

目标检测,图像分类。faster,yolo

目标检测,图像分类。faster,yolo...

DAB-DETR目标检测环境配置、DAB-DETR目标检测代跑训练、DAB-DETR目标检测改进创新DAB-DETR目标检测配置:Windows、Ubuntu、Centos、Macos等系统环境

DAB-DETR目标检测环境配置、 DAB-DETR目标检测代跑训练、 DAB-DETR目标检测改进创新 DAB-DETR目标检测配置:Windows、Ubuntu、Centos、Macos等系统环境,如果电脑拥有显卡,可配置GPU版本环境。 DAB-DETR目标检测代跑训练、:可支持训…...

Comsol光子晶体光纤模式分析之FSM Mode计算

Comsol光子晶体光纤模式分析,fsm mode计算在光学领域,光子晶体光纤以其独特的光学特性吸引着众多研究者的目光。而在对光子晶体光纤进行深入研究时,模式分析是至关重要的一环,其中FSM(Full Vectorial Finite Element M…...

8086 汇编报错全总结与归纳

一、可能遇到的所有错误汇总错误代码错误含义触发行(你的代码)核心根源A2048Must be index or base registermov [ax],1H、add [dx],[ax]8086 硬件不支持用非BX通用寄存器做内存间接寻址A2035Operand must have sizemov [bx],1H汇编器无法判断操作数是 8…...

Speechless:为你的微博记忆穿上PDF保护衣

Speechless:为你的微博记忆穿上PDF保护衣 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在数字记忆碎片化的时代,你是否曾担…...

ChilloutMix NiPrunedFp32Fix 模型完整教程:从零开始掌握AI图像生成

ChilloutMix NiPrunedFp32Fix 模型完整教程:从零开始掌握AI图像生成 【免费下载链接】chilloutmix_NiPrunedFp32Fix 项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix ChilloutMix NiPrunedFp32Fix 是一款基于稳定扩散技…...

2026届学术党必备的六大AI学术神器推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理以及深度学习算法的AI论文查重技术,经过对文本的语义结构、句式…...

2025届毕业生推荐的五大AI辅助写作平台横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 把人工智能生成内容的检测概率给降低,得从文本特征方面着手去进行系统性的优化。…...

破茧成蝶:Java后端从0到资深工程师的进阶之路(五)

破茧成蝶:Java后端从0到资深工程师的进阶之路(五)并发篇——多线程与高并发实战现代后端系统,高并发是绕不开的挑战。多线程编程就像一把双刃剑:用得好了,系统吞吐量飙升;用得不好,死…...

带你读顶会论文丨基于溯源图的APT攻击检测

带你读顶会论文丨基于溯源图的APT攻击检测 **摘要:**本次分享主要是作者对APT攻击部分顶会论文阅读的阶段性总结,将从四个方面开展。 本文分享自华为云社区《[论文阅读] (10)基于溯源图的APT攻击检测安全顶会总结》,作者:eastmoun…...

Xray-强大的漏洞扫描工具

Xray-强大的漏洞扫描工具 Xray是什么? xray (https://github.com/chaitin/xray) 是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器,支持主动、被动多种扫描方式,自备盲打平台、可以灵活定义 POC,功能丰富,调用简单&a…...

2026年,探秘义乌一次性包装盒定做厂家的独特工艺与优质服务!

在商品包装需求日益多样化的今天,一次性包装盒的定制市场愈发繁荣。义乌,作为全球知名的小商品之都,拥有众多一次性包装盒定做厂家,它们以独特的工艺和优质的服务在市场中占据一席之地。今天,我们将走进一家具有代表性…...

CMMI 能力成熟度模型集成介绍

CMMI(Capability Maturity Model Integration)即能力成熟度模型集成,是由美国卡内基梅隆大学软件工程研究所(SEI)研发、现由ISACA旗下CMMI 研究院维护的国际权威过程改进与评估框架,核心是通过标准化最佳实…...

水厂供水泵房自控案例(工程实际在用) PLC程序+触摸屏程序+组态软件程序+图纸

水厂供水泵房自控案例(工程实际在用) PLC程序触摸屏程序组态软件程序图纸;凌晨三点,水厂中控室的警报突然炸响。我盯着屏幕上跳动的压力曲线,右手已经摸到了对讲机——这种情况在供水泵房太常见了。今天要聊的自控系统,可是我们项…...

2026年深圳冷冻食品包装盒代理,其中商机你知道多少?

在深圳这个充满活力与机遇的城市,冷冻食品市场一直呈现出稳步增长的态势。随着消费者对冷冻食品需求的不断增加,冷冻食品包装盒的市场需求也随之水涨船高。2026 年,深圳冷冻食品包装盒代理蕴含着巨大的商机。下面就为你详细剖析其中的商机以及…...

基于YOLOv10深度学习的植物叶片病害识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目+模型)

一、项目介绍 本项目基于先进的YOLOv10目标检测算法,开发了一套智能植物叶片病害识别检测系统。系统能够实现对38种不同植物叶片健康状况的实时检测与分类,包括多种常见病害及健康叶片。通过图形用户界面,用户可以方便地上传图片、视频或调用…...

基于MATLAB平台PCA的人脸识别:开启识别新征程

基于MATLAB平台PCA的人脸识别,程序已调通,可将自己的数据替换进行识别。 得到识别准确率结果。最近在研究人脸识别技术,基于MATLAB平台利用PCA(主成分分析)实现了一个人脸识别程序,现在跟大家分享分享。 PC…...

10:2026 AI变现实战总览:内容、工具、信息差三种变现闭环

作者: HOS(安全风信子) 日期: 2026-04-01 主要来源平台: GitHub 摘要: 提前剧透12大模块如何串联成3条可复制的赚钱路径。本文构建内容变现2.0闭环全图(Agentic生成)、工具/SaaS变现闭环全图(Ag…...

Artemis II宇航员在太空中遭遇Outlook故障问题

许多沮丧的用户都曾发誓要把微软Outlook发射到太空中,但NASA实际上已经这样做了——在一次绕月之旅中,现在它正给宇航员带来麻烦。目前正在环绕地球的猎户座飞船上的宇航员正在处理一系列日常维护任务,包括让他们的设备正常工作。从与休斯顿控…...

【芯片后仿(Post-Silicon Simulation)完全指南:从入门到流片前的最后一道防线】

一、什么是后仿?为什么要做后仿?后仿,全称Post Netlist Simulation(Post-Sim)或Gate Level Simulation(GLS),是指在RTL代码综合成门级网表后,通过反标SDF(Sta…...