支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码
支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码
支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象
https://www.cnblogs.com/oktokeep/p/18249346
package com.example.core.mydemo; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.core.mydemo.json2.GsonUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import java.util.HashMap;
import java.util.Map; public class MapTest {
private static final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); // 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper(); public static void main(String[] args) throws JsonProcessingException {
/**
* output:
* {aaa=111, ccc=333, bbb=222}
* gson={"aaa":"111","ccc":"333","bbb":"222"}
* JSON={"aaa":"111","ccc":"333","bbb":"222"}
* JSONObject={"aaa":"111","ccc":"333","bbb":"222"}
*/
Map<String,String> map = new HashMap<>();
map.put("aaa","111");
map.put("bbb","222");
map.put("ccc","333");
System.out.println(map); System.out.println("gson="+gson.toJson(map));
System.out.println("JSON="+JSON.toJSONString(map));
JSONObject jsonObject = (JSONObject) JSON.toJSON(map);
System.out.println("JSONObject="+jsonObject.toJSONString()); /**
* output: 结论:gson会转义编码符号,
* ==符号错误,不一致
* gson={"user":{"name":"刘德华","age":50,"url":"http://www.baidu.com/\u003d\u003d"},"sign":"签名串"}
* gson-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
*
* json字符串顺序不一致
* JSON={"sign":"签名串","user":{"age":50,"name":"刘德华","url":"http://www.baidu.com/=="}}
* JSON-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
*
* 使用JSONObject是最优解。json字符串顺序和==符号都一致
* JSONObject={"sign":"签名串","user":{"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}}
* JSONObject-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
*
* 使用jackson也可以保持json字段顺序和==符号一致
* MAPPER={"user":{"name":"刘德华","age":50,"url":"http://www.baidu.com/=="},"sign":"签名串"}
* MAPPER-userJson={"name":"刘德华","age":50,"url":"http://www.baidu.com/=="}
*/
User user = new User();
user.setName("刘德华");
user.setAge(50);
user.setUrl("http://www.baidu.com/=="); People people = new People();
people.setUser(user);
people.setSign("签名串"); String json1 = new Gson().toJson(people);
System.out.println("gson=" + json1);
JSONObject JSONObject = JSON.parseObject(json1);
String userJson = JSONObject.getString("user");
System.out.println("gson-userJson=" + userJson); json1 = JSON.toJSONString(people);
System.out.println("JSON=" + json1); JSONObject = JSON.parseObject(json1);
userJson = JSONObject.getString("user");
System.out.println("JSON-userJson=" + userJson); JSONObject jsonObject2 = (JSONObject) JSON.toJSON(people);
json1 = jsonObject2.toJSONString();
System.out.println("JSONObject=" + json1); JSONObject = JSON.parseObject(json1);
userJson = JSONObject.getString("user");
System.out.println("JSONObject-userJson=" + userJson); json1 = MAPPER.writeValueAsString(people);
System.out.println("MAPPER=" + json1); JSONObject = JSON.parseObject(json1);
userJson = JSONObject.getString("user");
System.out.println("MAPPER-userJson=" + userJson); }
static class People{
User user;
String sign; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public String getSign() {
return sign;
} public void setSign(String sign) {
this.sign = sign;
}
}
static class User{
private String name;
private Integer age;
private String url; public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
}
支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码的更多相关文章
- Delphi支付宝支付【支持SHA1WithRSA(RSA)和SHA256WithRSA(RSA2)签名与验签】
作者QQ:(648437169) 点击下载➨Delphi支付宝支付 支付宝支付api文档 [Delphi支付宝支付]支持条码支付.扫码支付.交易查询.交易退款.退款查询.交易撤 ...
- .NET RSA解密、签名、验签
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Sec ...
- erlang的RSA签名与验签
1.RSA介绍 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而 ...
- RSA加密、解密、签名、验签的原理及方法
一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...
- PHP SHA1withRSA加密生成签名及验签
最近公司对接XX第三方支付平台的代付业务,由于对方公司只有JAVA的demo,所以只能根据文档自己整合PHP的签名加密,网上找过几个方法,踩到各种各样的坑,还好最后算是搞定了,话不多说,代码分享出来. ...
- 中行P1签名及验签
分享中国银行快捷.NET P1签名和验签方法代码中ReturnValue为自定义类型请无视 #region 验证签名 /// <summary> /// 验证签名 /// </sum ...
- 几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式
# 原创,转载请留言联系 为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性.例如小明发一封表白邮件给小红,他总不希望给别人看见吧.而各种各样的技术就是为了 ...
- Delphi微信支付【支持MD5和HMAC-SHA256签名与验签】
作者QQ:(648437169) 点击下载➨微信支付 微信支付api文档 [Delphi 微信支付]支持付款码支付.二维码支付.订单查询.申请退款.退款查询.撤销订单.关闭订单. ...
- RSA后台签名前台验签的应用(前台采用jsrsasign库)
写在前面 安全测试需要, 为防止后台响应数据返给前台过程中被篡改前台再拿被篡改后的数据进行接下来的操作影响正常业务, 决定采用RSA对响应数据进行签名和验签, 于是有了这篇<RSA后台签名前台验 ...
- Delphi RSA签名与验签【支持SHA1WithRSA(RSA1)、SHA256WithRSA(RSA2)和MD5WithRSA签名与验签】
作者QQ:(648437169) 点击下载➨ RSA签名与验签 [delphi RSA签名与验签]支持3种方式签名与验签(SHA1WithRSA(RSA1).SHA256WithRSA(RSA2)和M ...
随机推荐
- IT人的年夜饭,也太香了吧
简介: 平时的IT人,奋战在修复bug前线,起早与贪黑齐飞,调休共假期待定.到了新春佳节,对于IT人来说,没有什么是比一顿年夜饭更让人熨贴肺腑的了.为了让废寝忘食编程序.闻机起早保运维的IT人过一个 ...
- 治理企业“数据悬河”,阿里云DataWorks全链路数据治理新品发布
简介: 10月19日,在2021年云栖大会上,阿里云重磅发布DataWorks全链路数据治理产品体系,基于数据仓库,数据湖.湖仓一体等多种大数据架构,DataWorks帮助企业治理内部不断上涨的&q ...
- [GPT] 使用 nodejs的 puppeteer 库使用完关闭后,linux上面有很多 chrome 进程
在使用 Node.js 的 Puppeteer 库时,如果你在使用完后关闭了浏览器,但在 Linux 上仍然存在很多 Chrome 进程,可能是因为没有正确地关闭所有相关的进程. 可以尝试以下方法 ...
- [GPT] Unable to negotiate with xx.xx.xx.xx port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
这个错误通常发生在 SSH 客户端无法找到与 SSH服务器 匹配的主机密钥类型时. 这可能是因为SSH服务器配置为使用SSH客户端不支持的主机密钥类型. 要解决此问题,您需要将缺少的主机密钥类型添 ...
- [Blockchain] Cosmos Starport 地址前缀的变更方式
# 在新的区块链上修改 starport app github.com/hello/planet --address-prefix your_new_prefix # 在已存在的区块链上修改 `app ...
- dotnet OpenXML 解析 PPT 里表格的样式
在 PPT 里面的表格可以通过表格样式配置决定表格的样式,本文将和大家介绍如何获取和解析表格的样式 本文属于 OpenXML 系列博客,有一定的上下文,详细请参阅 Office 使用 OpenXML ...
- k8s证书延长时间(二)
1.查看证书有效时间 # 通过下面可看到ca证书有效期是10年,2022-2032 [root@master ~]# openssl x509 -in /etc/kubernetes/pki/ca.c ...
- await this.$nextTick()和this.$nextTick(callback)有什么区别?记一次bug调试
背景 需要实现一个需求,一个小区业务详情页面,在左侧菜单栏切换了小区后,详情页跟着切换. 这个详情页面是根据url上的/:id来确定小区id的,所以切换了小区后,应该切换路由. 于是这样实现: wat ...
- navicat15安装以及破解
一. 下载 链接:https://pan.baidu.com/s/173rqp-DZJ3Om_QNN0NxbEg 提取码:zop2 二. 安装 2.1 解压刚才的文件 2.2 安装navicat15. ...
- 坐标轴调控大揭秘:Matplotlib坐标轴设置全攻略+顺口溜,一文掌握!
在数据可视化的世界里,Matplotlib是那把魔法棒,让枯燥的数据跃然纸上,而掌控这把魔法棒的核心,就是对坐标轴的精妙操作.今天,就让我们一起揭开Matplotlib坐标轴设置的神秘面纱,配上易记的 ...