
楼主好,MD5签名是消息摘要,用于验证是否被篡改,不能解密方法是接收方用发送方的签名算法,重新计算一次签名,然后比对结果
请看示例代码(原创,已通过测试):
import javaioUnsupportedEncodingException;import javautilMap;
import javautilTreeMap;
import orgspringframeworkutilDigestUtils;
/
仅用于演示用于生产需完善细节处理
@author breakenkinfe
/
public class MD5Sign {
static String md5Sign(Map<String,String> data) throws UnsupportedEncodingException {
String stringSignTemp="";
for(String key:datakeySet()) {
if("sign"equals(key)) {
continue;//sign不参与签名
}
String value=dataget(key);
if(value==null||valuetrim()isEmpty()) {
continue;//值为空不参与签名
}
stringSignTemp+=(key+"="+dataget(key)+"&");
}
if(!stringSignTempisEmpty()) {
stringSignTemp=stringSignTempsubstring(0, stringSignTemplength()-1);//去掉最后一个'&'字符
}
// Systemoutprintln("待签明文:"+stringSignTemp);
return DigestUtilsmd5DigestAsHex(stringSignTempgetBytes("UTF-8"))toUpperCase();
}
static void validSign(Map<String,String> data) throws UnsupportedEncodingException {
String sign=dataget("sign");
boolean rs= signequals(md5Sign(data));
if(rs) {
Systemoutprintln("签名正确:"+sign);
}else {
Systemoutprintln("签名错误:"+sign);
}
}
public static void main(String[] args) throws UnsupportedEncodingException {
//报文数据
Map<String,String> data=new TreeMap<String,String>();//保证key按ascii升序排列
dataput("key3", "value3");
dataput("key1", "value1");
dataput("key4", " ");
dataput("key2", "value2");
Systemoutprintln("数据集:"+data);
//发送方增加签名
String sign=md5Sign(data);
Systemoutprintln("MD5签名:"+sign);//output:38727F53497BF85E0BA60DE403C61B83
dataput("sign", sign);
//接收方验证签名
validSign(data);//正确
dataput("sign", "38727F53497BF85E0BA60DE403C61B80");
validSign(data);//错误
}
}
/ 输出:
数据集:{key1=value1, key2=value2, key3=value3, key4= }
MD5签名:38727F53497BF85E0BA60DE403C61B83
签名正确:38727F53497BF85E0BA60DE403C61B83
签名错误:38727F53497BF85E0BA60DE403C61B80
/
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>16</version>
</dependency>
DigestUtilsmd5Hex(str)
需要导入一个jar包:commons-codec
代码如下:
import orgapachecommonscodecdigestDigestUtils;
public class ToMain {
public static void main(String[] args) {
Systemoutprintln(DigestUtilsmd5Hex("baiducom"));
}
}
1、Java
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
2、名字来源
Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关:如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans(对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡。
以上就是关于请问这个签名 java 应该怎么解析全部的内容,包括:请问这个签名 java 应该怎么解析、谁给个md5的Maven dependence,要能用的!附上用法。、java 有哪些jar包直接提供了获得md5值的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)