springboot~关于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的。

原文链接:https://www.cnblogs.com/lori/p/17347186.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot~关于md5签名引发的问题 - Python技术站

(0)
上一篇 2023年4月23日
下一篇 2023年4月23日

相关文章

  • Java实现学生信息管理系统(使用数据库)

    下面我来详细讲解Java实现学生信息管理系统使用数据库的完整攻略。 思路 实现学生信息管理系统需要考虑以下几个方面: 数据库的设计和建立 Java程序连接数据库 Java程序操作数据库 前端页面的设计和制作 将Java程序和前端页面结合在一起 在这里我们选择使用MYSQL数据库进行操作,使用JDBC连接数据库,采用MVC设计模式来实现程序。 实现步骤 1. …

    Java 2023年5月19日
    00
  • 详解SpringBoot2 使用Spring Session集群

    详解SpringBoot2 使用Spring Session集群攻略 什么是Spring Session Spring Session是一个支持在不同Web容器之间共享Session数据的项目。 Spring Session的集群 在集群环境下,我们需要使用Spring Session来共享Session数据。具体实现方式如下: 引入Spring Sessi…

    Java 2023年5月19日
    00
  • springboot jpa 实现返回结果自定义查询

    下面是详细讲解“springboot jpa 实现返回结果自定义查询”的完整攻略。 1. 什么是 Spring Boot JPA? Spring Boot是Spring项目中的一种用于简化配置和开发的框架。同时,它也是一个类似于Spring Data JPA的持久化框架。Spring Data JPA则是一个封装了JPA的框架,提供了许多便捷的API,使我们…

    Java 2023年5月20日
    00
  • IDEA2022.2的简介、下载与安装、配置教程

    IDEA2022.2简介 IntelliJ IDEA是一款由JetBrains开发的Java集成开发环境(IDE),它具有丰富的功能,能够支持多种编程语言,包括Java、Kotlin、Groovy、Scala等。最新版本是IntelliJ IDEA 2022.2,该版本的更新包括改进的性能、新的工具和特性,以及对多种语言的良好支持。 IDEA2022.2下载…

    Java 2023年5月26日
    00
  • kafka生产者和消费者的javaAPI的示例代码

    以下是关于Kafka生产者和消费者JavaAPI的示例代码的完整攻略。 Kafka Kafka是一个分布式流处理平台,主要由以下组件构成: 生产者(Producer) 消费者(Consumer) 主题(Topic) 分区(Partition) 偏移量(Offset) Broker ZooKeeper Kafka的生产者和消费者JavaAPI提供了开发人员构建…

    Java 2023年5月19日
    00
  • Java多线程之synchronized同步代码块详解

    Java多线程之synchronized同步代码块详解 什么是synchronized同步代码块? synchronized 是 Java 中的一个关键字,用来实现多线程的同步。synchronized 有两个作用:一是保证代码块只能由一个线程执行,二是保证该线程执行该代码块期间所需的所有资源都已获取。 具体地说,我们可以使用synchronized关键字来…

    Java 2023年5月18日
    00
  • Java实现SHA算法的方法详解

    Java实现SHA算法的方法详解 什么是SHA算法? SHA(Secure Hash Algorithm)即安全散列算法,是密码学中常用的一种哈希函数,将任意长度的字符串映射为固定长度的字符串,且不同的输入必须映射到不同的输出上。SHA算法主要有SHA-1、SHA-224、SHA-256、SHA-384、SHA-512等不同的版本,其中SHA-256是目前应…

    Java 2023年5月19日
    00
  • Java非侵入式API接口文档工具apigcc用法详解

    Java非侵入式API接口文档工具apigcc用法详解 概述 apigcc是一款非侵入式的API接口文档生成工具,可以帮助Java开发人员快速生成符合RESTful标准的API接口文档,同时支持多种API文档输出格式,包括HTML、Markdown、PDF等格式。 安装 apigcc可以通过npm安装,使用如下命令即可: npm install apigcc…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部