请问这个签名 java 应该怎么解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问这个签名 java 应该怎么解析相关的知识,希望对你有一定的参考价值。

生成签名没有问题 , 求解析验证签名的代码

楼主好,MD5签名是消息摘要,用于验证是否被篡改,不能解密.方法是接收方用发送方的签名算法,重新计算一次签名,然后比对结果.

请看示例代码(原创,已通过测试):

import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.TreeMap;

import org.springframework.util.DigestUtils;

/**
 * 仅用于演示.用于生产需完善细节处理.
 * @author breakenkinfe
 */
public class MD5Sign 

static String md5Sign(Map<String,String> data) throws UnsupportedEncodingException 
String stringSignTemp="";
for(String key:data.keySet()) 
if("sign".equals(key)) 
continue;//sign不参与签名

String value=data.get(key);
if(value==null||value.trim().isEmpty()) 
continue;//值为空不参与签名

stringSignTemp+=(key+"="+data.get(key)+"&");


if(!stringSignTemp.isEmpty()) 
stringSignTemp=stringSignTemp.substring(0, stringSignTemp.length()-1);//去掉最后一个'&'字符


// System.out.println("待签明文:"+stringSignTemp);
return DigestUtils.md5DigestAsHex(stringSignTemp.getBytes("UTF-8")).toUpperCase();


static void validSign(Map<String,String> data) throws UnsupportedEncodingException 
String sign=data.get("sign");
boolean rs= sign.equals(md5Sign(data));
if(rs) 
System.out.println("签名正确:"+sign);
else 
System.out.println("签名错误:"+sign);



public static void main(String[] args) throws UnsupportedEncodingException 
//报文数据
Map<String,String> data=new TreeMap<String,String>();//保证key按ascii升序排列
data.put("key3", "value3");
data.put("key1", "value1");
data.put("key4", " ");
data.put("key2", "value2");
System.out.println("数据集:"+data);

//发送方增加签名
String sign=md5Sign(data);
System.out.println("MD5签名:"+sign);//output:38727F53497BF85E0BA60DE403C61B83
data.put("sign", sign);

//接收方验证签名
validSign(data);//正确
data.put("sign", "38727F53497BF85E0BA60DE403C61B80");
validSign(data);//错误



/** 输出:
数据集:key1=value1, key2=value2, key3=value3, key4= 
MD5签名:38727F53497BF85E0BA60DE403C61B83
签名正确:38727F53497BF85E0BA60DE403C61B83
签名错误:38727F53497BF85E0BA60DE403C61B80
*/

参考技术A 我告诉你怎么做追答

是验证签名ba

参考技术B 太简单了 这个追问

能把代码发我吗, 861888570 , 不是生成签名的代码 是解析签名代码

请问java中parse()的问题

请问怎么用parse()方法
这个方法是按照特定的格式把字符串解析为日期对象的对吧?
谢谢1楼的
我试了下如果不加 throws ParseException就报错
加的话可以正常运行

参考技术A import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest
public static void main(String[] args) throws ParseException
String date="1988-10-10 20:10:10";
Date d=null;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
d=sdf.parse(date);//将String to Date类型
System.out.println(d);



一个小例子...刚写的...

祝楼主早日成功!!

还有什么不明白的..百度HI我...!

老大这是抛出一定要有的可好 。。。

你没有学过异常吧??

赶紧找书学一下吧!!本回答被提问者采纳

以上是关于请问这个签名 java 应该怎么解析的主要内容,如果未能解决你的问题,请参考以下文章

请问 哪有阿里云 短信服务 api 请求签名PHP教程

电子签名用Java怎么实现

让网站只有装了证书才可以访问

Android开发对apk文件进行签名

APK包名修改 请问如何修改APK包名

iOS签名机制解析