HmacSHA256生成的Token,如何校验?

代码:

 private static Mac hmac=null;  
 static {  
   try {  
       //通过环境变量获取密匙  
  String SECRETKEY =System.getProperty("ACCESS_SECRETKEY");  
  hmac = Mac.getInstance("HmacSHA256");  
  SecretKeySpec keySpec = new SecretKeySpec(SECRETKEY.getBytes(StandardCharsets.UTF\_8), "HmacSHA256");  
  hmac.init(keySpec);  
  }catch (Exception ignored){  
        ignored.printStackTrace();  
  }  
}  
private Sign(){  

}  
/**  
 * service access token  @param json  
   @return  
 */ 
public static String sign(String json){  
    return hmacsha256(json);  
}  

/**  
  * sign token length doesn't check 64 bits  @param sign  
  * @return  
  */  
public static boolean verify( String sign){  
    return null != sign && sign.trim().length() < 64;  
}  

private  static String hmacsha256(String content) {  
    byte[] byteSig = hmac.doFinal(content.getBytes(StandardCharsets.UTF_8));  

 return Base64.getEncoder().encodeToString(byteSig).replaceAll("\\\\s\*", "");  
}

我使用以上代码调用HmacSHA256加密算法,可以正常执行和加密,因为HmacSHA256是属于不可逆的,所以我不能解密,我该怎么校验sign是否属于我们这个平台的?

阅读 8.4k
1 个回答

这种都是用加密结果对比的。
将“待签名字符串”在用你的密钥重新加密一次,将加密出来的密文对比。如果不一样说明签名错误,说明密钥不一致或者报文内容在生成签名之后被篡改了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题