首页 > 其他分享 >判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过

判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过

时间:2024-06-15 15:44:36浏览次数:19  
标签:编码 java URL 和验 url1 println encoded out

判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过
如果含有 + %符号无法判断, 否则判断不准或报错 Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "#&"

package com.example.core.mydemo.java;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * url1=%3D%3D
 * decodedUrl===
 * URL 1 is encoded: true
 * decodedUrl===
 * URL 2 is encoded: false
 * url1=%2B+%2F%3F%25%23%26
 * decodedUrl=+ /?%#&
 * URL 3 is encoded: true
 * decodedUrl= /?#&
 * URL 4 is encoded: false
 * decodedUrl=
 * URL 5 is encoded: true
 * URL 6 is encoded: true
 * java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern
 *     at java.net.URLDecoder.decode(URLDecoder.java:187)
 *     at com.example.core.mydemo.java.URLUtils.isUrlEncoded(URLUtils.java:22)
 *     at com.example.core.mydemo.java.URLUtils.main(URLUtils.java:56)
 * */
public class URLUtils {
    public static boolean isUrlEncoded(String url) {
        try {
            String decodedUrl = URLDecoder.decode(url, "UTF-8");
            System.out.println("decodedUrl=" + decodedUrl);
            return !decodedUrl.equals(url);
        } catch (UnsupportedEncodingException e) {
            // 处理异常
            e.printStackTrace();
            return false;
        }catch (IllegalArgumentException ex){
            ex.printStackTrace();
            return true;
        }
    }


    public static void main(String[] args) throws UnsupportedEncodingException {
        String url1  = URLEncoder.encode("==","UTF-8");
        System.out.println("url1=" + url1);
        String url2  = "==";

        System.out.println("URL 1 is encoded: " + isUrlEncoded(url1));
        System.out.println("URL 2 is encoded: " + isUrlEncoded(url2));


        url1  = URLEncoder.encode("+ /?%#&","UTF-8");
        System.out.println("url1=" + url1);
        url2  = " /?#&";  //去掉 + %  否则判断不准或报错 Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "#&"


        System.out.println("URL 3 is encoded: " + isUrlEncoded(url1));
        System.out.println("URL 4 is encoded: " + isUrlEncoded(url2));

        url1  = "+";
        url2  = "%";
        System.out.println("URL 5 is encoded: " + isUrlEncoded(url1));
        System.out.println("URL 6 is encoded: " + isUrlEncoded(url2));

    }

}

 

标签:编码,java,URL,和验,url1,println,encoded,out
From: https://www.cnblogs.com/oktokeep/p/18249356

相关文章

  • 抖音验证签名和接口含中文签名,需要在发送端加上utf8编码
    抖音验证签名和接口含中文签名,需要在发送端加上utf8编码抖音验签和抖音异步通知回调验签解决:是对整个接收的字符串做验签,而不是部分数据做验签解决中文参数问题,否则中文乱码报验签错误 签名算法https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/serve......
  • 支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码
    支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象https://www.cnblogs.com/oktokeep/p/18249346packagecom.example.core.mydemo;importcom.alibaba.fastjson.JSON;imp......
  • 字符编码问题
    常使用的几种字符编码和相互之间关系我们做编程开发时,经常看到并使用的一些字符集,如GBK、Uniode、UTF-8等等。但是我们在使用他们时,如果对底层原理浅尝辄止往往在项目开发时,遇到相关问题摸不着头绪,本文先来浅析一下它们彼此的关系。计算机在存储信息时,不管是英文字符还是中文字......
  • unicloud持久化小程序获取的临时微信头像url路径(教程)
    自2022年10月25日后,用户头像昵称获取规则作了调整:getUserInfo接口获取用户头像将统一返回默认灰色头像,昵称将统一返回“微信用户”。如业务需获取用户头像昵称,可以使用「头像昵称填写能力」头像选择需要将 button 组件 open-type 的值设置为 chooseAvatar,当用......
  • 基于Python+scopy实现的渗透测试工具对网站URL以及端口进行漏洞检测系统
    目录摘要2Abstract3第1章绪论51.1研究背景与意义51.2国内外研究现状和发展趋势51.3本论文主要工作及组织结构61.3.1论文主要研究工作61.3.2论文的组织结构6第2章web安全评估及测试的介绍82.1渗透测试82.2web安全评估8第3章渗透测试及安......
  • 用c语言实现base64编码接口程序
    简要介绍base64Base64编码是一种常用的编码方式,主要用于将二进制数据转换为可打印的ASCII字符集,以便在不支持二进制传输的介质上安全地传输数据。......
  • 简单聊聊字符编码
    01.简单聊聊字符编码几乎人人都遇过乱码问题,程序们更是经常被乱码弄得抓狂,那么乱码产生的原因是什么呢?字符是如何在计算机里存储的呢?本系列文章我们就来聊聊这个主题。字符编码是计算机世界里最基础、最重要的一个主题之一,如果你是计算机行业工作者,很有必要掌握。如果不彻......
  • 编码与加密(对称加密与非对称加密)
    目录编码与加密Base64编码(可逆)十六进制编码(hex.EncodeToString函数)(可逆)哈希算法(不可逆)MD5(不可逆)SHA-256(不可逆)MAC算法(不可逆)加密算法(可逆)对称加密算法(可逆)DES(可逆)AES(可逆)区别非对称加密算法(可逆)RSA(可逆)ECC(可逆)PEM格式存储密钥DER格式存储密钥加密模式CB......
  • 多项式与点值的双射 与 Reed–Solomon 编码纠错
    其实早就知道啊,不过apiot3之后还是在皮皮橙大神的指导下认真看了看.放一个$O(n^2)$的实现#include<bits/stdc++.h>usingu32=unsigned;usingi64=longlong;usingu64=unsignedlonglong;usingidt=std::size_t;constexpru32mod=998244353;constexpru32mul(u32......
  • 核心(Hutool-core)工具类(字符编码工具-CharsetUtil)
    介绍CharsetUtil主要针对编码操作做了工具化封装,同时提供了一些常用编码常量。常量常量在需要编码的地方直接引用,可以很好的提高便利性。字符串形式ISO_8859_1UTF_8GBKCharset对象形式CHARSET_ISO_8859_1CHARSET_UTF_8CHARSET_GBK方法编码字符串转为Charset对象Char......