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

public boolean validateSign(Map<String, Object> 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;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值