MD5加密
一、Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。
1、主要作用:防篡改(只要消息里多了或者少了那怕一个空格,生成的秘钥都会相差很大);
2、签名:发消息时将信息通过MD5加密,再通过Base64.encode(b)加密(),生成一个秘钥;消息和秘钥一起发送;
3、验签:收到消息时按照同样的发放加密生成秘钥,对比接收到的秘钥和生成的秘钥,如果一致,则验证通过,进行下一步处理;
二、具体实现步骤
为了安全,签名时可规定加入一定特殊信息,如:报文|key,{"input":{},"sys":{},"comm_req":{}}|11111111111111111111111111111111
实际加密是{"input":{},"sys":{},"comm_req":{}}加了|11111111111111111111111111111111后生成的密匙;
验签时再通过同样的方法生成密钥,与传过来的密钥对比
1.MD5签名
public static String MD5Sign(String sigstr,String key){
sigstr = sigstr +"|"+ key;
byte[] b;
String retStr = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(sigstr.getBytes("UTF-8"));
byte[] tmp = md.digest();
b = tmp ;
//retStr即为生成的密匙
retStr = Base64.encode(b);
System.out.println("计算签名:" + retStr);
} catch (UnsupportedEncodingException e) {
new UnsupportedEncodingException("编码转换失败");
}
return retStr;
}
public static byte[] encryptMD5(byte[] source) {
return EncryptUtils.encryptMD5(source);
}
2.MD5验签
收到消息后用同样的方法生成密匙,与传过来的密匙进行对比
public static Boolean MD5Verify(String sigstr,String key,String miShi){
//按约定规则做相同签名
String retStr = MD5Sign(sigstr,key);
System.out.println("对方签名:" + miShi);
System.out.println("验签结果:" + miShi.equals(retStr));
return miShi.equals(retStr); //签名值做对比
}