首页 > 其他分享 >springboot~关于md5签名引发的问题

springboot~关于md5签名引发的问题

时间:2023-04-23 17:34:03浏览次数:32  
标签:十六进制 springboot URL sign url 参数 签名 extUserId md5

事实是这样的,我有个接口,这个接口不能被篡改,于是想到了比较简单的md5对url地址参数进行加密,把这个密码当成是sign,然后服务端收到请求后,使用相同算法也生成sign,两个sign相同就正常没有被篡改过。

问题的出现

  • 接口中的参数包括userId,extUserId,时间,其中extUserId字符编码,中间会有+这种符号
  • 有些用户使用签名接口正常
  • 有一些用户总显示签名失败

问题原因

  • 因为有些用户的extUserId中包括了url上的特殊字符,它不能正常在在url上传输,必须进行urlEncode编码才行,这一点非常容易被忽略;程序中一般不需要手动urlDecode解码,都是由框架帮我们实现的。
  • 下面整理了一些url上需要编码的字符:
    • + URL中+表示空格 十六进制: %2B
    • / 分离目录和子目录 十六进制 : %2F
    • ? 分离实际的URL和参数 十六进制: %3F
    • % 特殊字符 十六进制: %25
    • # 表示书签 十六进制: %23
    • & URL中指定参数间的分隔符 十六进制: %26
    • = URL中指定参数的值 十六进制:%3D
    • 空格 URL中的空格可以用+号或者编码 十六进制 : %20

url在签名时一般这样处理

sign=md5(userId+extUserId+simpleDateFormat.format(new Date()) + SECRET).toUpperCase();
?extUserId=URL.Encode(extUserId)&sign=sign

注意:sign中是接收的参数,它不需要Encode,应该框架已经帮我们做了;而向下传递的url参数extUserId是需要手动Encode的。

标签:十六进制,springboot,URL,sign,url,参数,签名,extUserId,md5
From: https://www.cnblogs.com/lori/p/17347186.html

相关文章

  • springboot集成JWT token验证
    登录模式基于session登录基于session的登录(有回话状态),用户携带账号密码发送请求向服务器,服务器进行判断,成功后将用户信息放入session,用户发送请求判断session中是否有用户信息,有的话放行,没有的话进行拦截,但是考虑到时App产品,牵扯到要判断用户的session,需要sessionID,还要根据sess......
  • Springboot yml配置参数加密 ,jasypt自定义解密器
    原文链接:https://www.cnblogs.com/JCcccit/p/16868137.html前言 最近项目组开始关注一些敏感数据的明文相关的事宜,其实这些东西也是都有非常成熟的解决方案。既然最近着手去解决这些事情,那么也顺便给还未了解的大伙普及一下。Springbootyml配置参数数据加密(数据加密篇......
  • springboot使用mybatis应用clickhouse
    一、clickhouse,说白了还是数据库,不一样的是clickhouse是列式存储,和传统的MySQL行式存储不同的地方在于,查询和所储。1)查询,行式和列式的区别,图形说明说明:理解上来说,行式对于一条数据的完整性索引会更快。而列式对于统计和查询指定数据会更加块。2)数据......
  • Springboot提高
    全局异常处理器未做处理的情况:当我没没有做任何异常处理时,mapper接口操作数据库出错时,会将异常向上抛给ServiceService中的异常会往上抛给controllercontroller会将异常抛给框架响应给浏览器一个JSON格式的数据这个数据并不符合我们统一响应结果的规范如何处理?方案一:......
  • Java__SpringBoot与Vue连接
    SpringBoot与Vue注解RequestMapping("/dir/")创建一个方便前端调用的接口目录/接口函数,前端可以获取到函数返回的数据@RestController@RequestMapping("/dir/")publicclassBotInfoController{@RequestMapping("getinfo/")publicMap<String,String>GetI......
  • Java MD5与RSA加密使用
    JavaMD5与RSA加密使用转发数据到广州,那边要求HTTP请求的头部需要用MD5签名,请求体数据需要使用RSA加密,研究了一下。MD5MD5(MessageDigestAlgorithm5)是一种广泛使用的加密哈希函数,可将任意长度的消息转换为128位的哈希值(通常以32个十六进制字符表示)。MD5算法是一种单......
  • SpringBoot 集成 Quartz + MySQL
    Quartz简单使用JavaSpringBoot中,动态执行bean对象中的方法源代码地址=>https://gitee.com/VipSoft/VipBoot/tree/develop/vipsoft-quartz工作原理解读只要配置好DataSourceQuartz会自动进行表的数据操作,添加QuartzJob任务保存QRTZ_JOB_DETAILS、QRTZ_TRIGGERS=>QR......
  • Java SpringBoot 7z 压缩、解压
    JavaSpringBoot7z压缩、解压JavaSpringBoot7z压缩、解压cmd7z文件压缩7z压缩测试添加依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.12</versi......
  • SpringBoot中底层对 /health 的请求是怎么处理的?
     在SpringBoot应用程序中,/health端点是通过HealthEndpointbean来处理的。当您访问/health端点时,SpringBoot会调用HealthEndpointbean的health()方法来检查应用程序的健康状态,并返回相应的响应。HealthEndpointbean是通过HealthEndpointAutoConfiguration自......
  • 记录一次艰难的云服务器部署前后端项目springBoot+mybatis和vue(两天解决的前后端跨域
    前言大家好我是歌谣今天继续给大家带来后端java的学习最近刚学习完java的一个增删改查紧接着就是部署项目了代码准备工作前端:vue后端:springboot+mybatis数据库mysql部署后端项目打包找到maven-package-runmavenbuild云服务器上面建立文件mkdir/www/springBoot创建文件......