接口签名验证

news/2024/11/29 9:00:07/

1.appId和secretKey定义
appId=APPID
secretKey =cfq4189auoo13y17ur9n2rl7v2tkz3iq
2.sign获取算法
md5(secretKey+参数json字符串+timestamp+secretKey)后的大写字母。

 /*** 参数按key进行排序* @param obj* @return*/public static String getParamStr(Object obj, List<String> ignoreKey) {if (obj == null) {return null;}Map<String, Object> map = object2Map(obj);if (map == null || map.isEmpty()) {return null;}//升序排序Map<String, Object> sortMap = new TreeMap<>(String::compareTo);sortMap.putAll(map);StringBuilder signStr = new StringBuilder();for (Map.Entry<String, Object> entry : sortMap.entrySet()) {//跳过参数if (CollectionUtils.isNotEmpty(ignoreKey) && ignoreKey.contains(entry.getKey())) {continue;}signStr.append(entry.getKey()).append("=").append(String.valueOf(entry.getValue())).append("&");}//去掉最后一个&signStr.deleteCharAt(signStr.length() - 1);return signStr.toString();}public static Map<String, Object> object2Map(Object obj) {if (obj == null) {return null;}BeanMap beanMap = new org.apache.commons.beanutils.BeanMap(obj);HashMap<String, Object> map = new HashMap<>();for (Object key : beanMap.keySet()) {// 去掉值为null的字段if ("class".equals(key) || Objects.isNull(beanMap.get(key))) {continue;}map.put((String) key, beanMap.get(key));}return map;}public static String sign(String paramJsonStr, String secretKey, String timestamp) throws NoSuchAlgorithmException {StringBuilder sb = new StringBuilder();sb.append(secretKey);//秘钥sb.append(paramJsonStr);//参数字符串sb.append(timestamp);//请求时间sb.append(secretKey);//秘钥return getMd5(sb.toString().getBytes(StandardCharsets.UTF_8)).toUpperCase();}public static String getMd5(byte[] buffer) throws NoSuchAlgorithmException {String s;char[] hexDigist = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};MessageDigest md = MessageDigest.getInstance("MD5");md.update(buffer);// 16个字节的长整数byte[] datas = md.digest();char[] str = new char[2 * 16];int k = 0;for (int i = 0; i < 16; i++) {byte b = datas[i];str[k++] = hexDigist[b >>> 4 & 0xf];// 高4位str[k++] = hexDigist[b & 0xf];// 低4位}s = new String(str);return s;}

3.接口Header请求头参数解释
在这里插入图片描述


http://www.ppmy.cn/news/666624.html

相关文章

文件和目录扫描

0x01漏洞原理&#xff1a; 程序在实现上没有充分过滤用户输入的/之类的目录跳转符&#xff0c;导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。 0x02工具介绍 0x01御剑 在“域名框”输入你要扫描的域名&#xff0c;然后点击扫描。 根据自身电脑配置&#xff0…

计算机扫描的文件保存在哪,电脑教程:文件扫描后自动保存哪里去了

科技本身&#xff0c;支配宇宙的自然规律是充满魅力的&#xff01;因此越来越多的人开始关注科技的相关动态&#xff0c;近来文件扫描后自动保存哪里去了的消息也是引起了很多人的关注&#xff0c;那么既然现在大家都想要知道文件扫描后自动保存哪里去了&#xff0c;小编今天就…

C语言的文件扫描

/* **************************************************************************** ******文件扫描 ******使用:向address变量输入要搜索的磁盘(亦或者目录地址)即可搜索目录下所有的文件(包括多层文件夹) ******如:输入 C:\\a*. 将会搜索a文件夹里所有的文件和文件夹,当a文件…

Duplicate Cleaner - 重复文件 / 相似文件扫描

Duplicate Cleaner - 重复文件 / 相似文件扫描 https://www.duplicatecleaner.com/ Duplicate Cleaner is a tool for finding and removing duplicate files from your computer or network drives. It is intended to be used on user content - documents, photos, images,…

Android中的文件扫描

在android中我们有时会做有关电子书阅读器、音乐播放器等软件&#xff0c;那么我们就避免不了要对内存中的文件进行扫描&#xff0c;音乐播放器我们可以使用android自带的MediaProvider进行处理&#xff0c;而其他的不是媒体文件就要我们自己处理了&#xff0c;接下来我将介绍两…

android 扫描指定文件,Android扫描指定文件和目录

1&#xff0e;启动MediaScanner服务&#xff0c;扫描媒体文件&#xff1a; 程序通过发送下面的Intent启动MediaScanner服务扫描指定的文件或目录&#xff1a; Intent.ACTION_MEDIA_SCANNER_SCAN_FILE&#xff1a;扫描指定文件 public void scanFileAsync(Context ctx, String f…

Python 实现文件关键字扫描

该Python脚本实现了一个简单的扫描器&#xff0c;用于在指定路径下查找指定类型的文件&#xff08;此处以.php文件为例&#xff09;&#xff0c;并对文件内容进行扫描&#xff0c;查找包含特定命令或函数的行。 具体流程如下&#xff1a; spider()函数用于遍历指定路径下的文…

android 文档扫描,《文档扫描大师》 简单方便的PDF生成器

想拥有一个能装进口袋的扫描仪吗&#xff1f;想轻松的把你需要的文档或者照片转换成PDF格式吗&#xff1f; 安卓手机上的文档扫描文档生成PDF之类的软件也有几款&#xff0c;今天再为大家介绍一款体积小巧但功能却一点也不逊色的文档扫描软件——《文档扫描大师(Scan Master)》…