一个可以即插即用的MD5加密签名方式
来源:互联网 发布:酷狗音乐数据异常 编辑:程序博客网 时间:2024/06/02 01:51
import java.util.*;
import org.apache.commons.codec.digest.DigestUtils;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.util.StringUtils;
public class Md5Sgin {
private static String authKey = "OOOOOOOOOXXXXXXXXXXX";
public static HashMap<String, Object> convertToMap(String msg) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(msg);
@SuppressWarnings("unchecked")
HashMap<String, Object> objMap = mapper.convertValue(jsonNode,
HashMap.class);
return objMap;
}
public static String generateSignatureByMsg(String jsonMsg) throws Exception{//生成签名
HashMap<String,Object> map=convertToMap(jsonMsg);
if(map.containsKey("sign")){
map.remove("sign");// 移除个人签名
}
map.put("authKey", authKey);
return generateSignature(map);
}
public static String generateSignature( Map<String,Object> parameters){
StringBuilder str = new StringBuilder();
List<String> sorted = new ArrayList<String>();
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
if(entry.getValue()!=null){
if (entry.getValue() instanceof List) {
Object[] objArr=((List)entry.getValue()).toArray();
LinkedHashMap<String, Object> tmpMap=null;
StringBuffer sBuffer=new StringBuffer();
sBuffer.append("[");
for (int i = 0; i < objArr.length; i++) {
tmpMap=(LinkedHashMap<String, Object>) objArr[i];
StringBuffer mapBuffer=new StringBuffer();
mapBuffer.append("{");
for (Map.Entry<String,Object> tmpEntry : tmpMap.entrySet()) {
if (tmpEntry.getValue()!=null)
mapBuffer.append(tmpEntry.getKey()+"="+tmpEntry.getValue().toString()+",");
}
if (mapBuffer.length()>1) {
mapBuffer.deleteCharAt(mapBuffer.length()-1);
}
mapBuffer.append("}");
if (i==objArr.length-1) {
sBuffer.append(mapBuffer.toString());
}else {
sBuffer.append(mapBuffer.toString()+",");
}
}
sBuffer.append("]");
sorted.add(entry.getKey()+ "=" +sBuffer.toString());
}else {
sorted.add(entry.getKey()+ "=" + entry.getValue().toString());
}
}
}
sorted.sort( (String p,String q) -> p.compareTo(q) );
sorted.forEach(str::append);
System.out.println(DigestUtils.md5Hex(str.toString()));
return DigestUtils.md5Hex(str.toString());
}
public static String generateSignatureByMsgForCheck(String jsonStr) throws Exception {//验证签名是否正确(该处只验证body{})
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(jsonStr);
@SuppressWarnings("unchecked")
HashMap<String, Object> objMap = mapper.convertValue(jsonNode,HashMap.class);
@SuppressWarnings("unchecked")
HashMap<String,Object> mapBody=(HashMap<String, Object>) objMap.get("body");
mapBody.remove("sign");
String verifySign=generateSignature(mapBody);
return verifySign;
}
// public static void main(String [] s) {
// String beforesign = "{\"body\":\"youcai\",\"merchantId\":\"1\",\"notifyUrl\":\"http://vpca-*******elenet.me/mer******i-pay*****pi/pay******status\",\"orderTotalAmount\":\"10\",\"orderTradeNo\":\"15561512*********3117321774\",\"payDeadLine\":\"26\",\"returnUrl\":\"localhost%3A8080%2F%23%2Forder\",\"sign\":\"f21ca8*********b2e593\",\"source\":\"web\",\"spBillCreateIp\":\"8.8.8.8\"}";
// try {
// System.out.println(beforesign);
// String aftersign = generateSignatureByMsg(beforesign);
// System.out.println(aftersign);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
0 0
- 一个可以即插即用的MD5加密签名方式
- 工作中常常使用的几种加密以及签名的方式:32位MD5
- MD5签名加密
- 常用的加密方式--MD5
- 记录md5的加密方式
- 一个MD5的加密方法
- ASP.NET的MD5加密方式
- MD5加密的三种实现方式
- MD5,MD2,SHA加密的实现方式
- 一个简单的 MD5 加密类 MD5密码加密 MD5数据加密 实例 教程 代码
- MD5加密方式
- android MD5加密方式
- MD5加密方式
- md5加密方式
- 加密方式之MD5
- MD5加密使用方式
- sql MD5 加密方式
- MD5加盐进行加密 以及更完全的加密方法HMAC+MD5的方式进行加密
- OWNCLOUD源码改动分析---登录模块
- ubuntu15.04安装chrome
- 【LeetCode】(231)Power of Two(Easy)
- Convert QWERTY to Dvorak (字符串)
- C++类所占空间总结
- 一个可以即插即用的MD5加密签名方式
- 字符串中的转义字符与字符串的长度
- 关于UIScreen的applicationFrame和bounds方法区别
- 输入n个整数,输出其中最小的k个
- CSU 1507 超大型LED显示屏
- log4j写日志到特定文件夹
- Android 时间格式化符号HH无法识别
- Android常见的几个控件(TextView,EditText,Button)
- 静态数据的内存图