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); //签名值做对比
}

原文地址:https://www.cnblogs.com/xyzq/p/6652886.html