MD5加密函数签名校验+时间戳时间间隔校验

public boolean validateSign(Map map,String sign) throws Exception{
String s="";
Iterator ir=map.keySet().iterator();//获取hashMap的键值,并进行遍历
      while(ir.hasNext()){//千万不要用map.keyset,无序的set你懂得,再次打乱你的排序
      String key= ir.next().toString();
s+=key;
s+="=";
s+=map.get(key);
}
Token token=tokenDao.findByCode(map.get("companyCode")+"_"+map.get("equipmentCode"));
s+="token="+token.getToken();
MessageDigest md5=MessageDigest.getInstance("MD5");
BASE64Encoder base64=new BASE64Encoder();
String string=base64.encode(md5.digest(s.getBytes("utf-8")));
if(string.equals(sign)){
return true;
}
else {
return false;
}

}

客户端将参数排序进行MD5加密后,得到sign。 服务端再次将你的参数排序进行MD5加密,比较两次得到的值,相同校验成功。为了防止抓包,然后不停发送攻击的包,可以把

时间戳当做参数加入其中。


public boolean validateTimeStamp(String TimeStamp) throws Exception{
    Date dt=new Date();
    SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
    Date timestamp = sdf.parse(TimeStamp); 
if((dt.getTime()-timestamp.getTime())/60000>5){//验证时间戳是否超过五分钟
return false;
}
else{
return true;
    }
}

你可能感兴趣的:(MD5加密函数签名校验+时间戳时间间隔校验)