|
@@ -0,0 +1,81 @@
|
|
|
|
+package com.boman.wechat.utils;
|
|
|
|
+
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+
|
|
|
|
+import java.security.MessageDigest;
|
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+
|
|
|
|
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @author shiqian
|
|
|
|
+ * @date 2021年08月04日 13:38
|
|
|
|
+ **/
|
|
|
|
+public class CheckAuthUtils {
|
|
|
|
+
|
|
|
|
+ private static final Logger LOGGER = LoggerFactory.getLogger(CheckAuthUtils.class);
|
|
|
|
+
|
|
|
|
+ /** 定义Token 务必与服务器保持一**/
|
|
|
|
+ private static String AUTHORIZATION = "Authorization";
|
|
|
|
+
|
|
|
|
+ public static final String SIGNATURE = "signature";
|
|
|
|
+ public static final String TIMESTAMP = "timestamp";
|
|
|
|
+ public static final String NONCE = "nonce";
|
|
|
|
+ public static final String ECHOSTR = "echostr";
|
|
|
|
+ public static final String SHA_1 = "SHA-1";
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 验证签名
|
|
|
|
+ *
|
|
|
|
+ * @param signature
|
|
|
|
+ * @param timestamp
|
|
|
|
+ * @param nonce
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static boolean checkSignature(String signature, String timestamp, String nonce) {
|
|
|
|
+ // 将token、timestamp、nonce三个参数进行字典排序
|
|
|
|
+ String[] arr = new String[]{AUTHORIZATION, timestamp, nonce};
|
|
|
|
+ Arrays.sort(arr);
|
|
|
|
+
|
|
|
|
+ // 将三个参数字符串拼接成一个字符串
|
|
|
|
+ StringBuilder content = new StringBuilder();
|
|
|
|
+ for (String s : arr) {
|
|
|
|
+ content.append(s);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ //获取加密工具
|
|
|
|
+ MessageDigest md = MessageDigest.getInstance(SHA_1);
|
|
|
|
+ // 对拼接好的字符串进行sha1加密
|
|
|
|
+ byte[] digest = md.digest(content.toString().getBytes());
|
|
|
|
+ String tmpStr = byteToStr(digest);
|
|
|
|
+ //获得加密后的字符串与signature对比
|
|
|
|
+ boolean result = tmpStr.equals(signature.toUpperCase());
|
|
|
|
+ LOGGER.info("method: checkSignature, tmpStr: {}, result: {}", tmpStr, result);
|
|
|
|
+ return result;
|
|
|
|
+ } catch (NoSuchAlgorithmException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static String byteToStr(byte[] byteArray) {
|
|
|
|
+ StringBuilder strDigest = new StringBuilder();
|
|
|
|
+ for (byte b : byteArray) {
|
|
|
|
+ strDigest.append(byteToHexStr(b));
|
|
|
|
+ }
|
|
|
|
+ return strDigest.toString();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static String byteToHexStr(byte mByte) {
|
|
|
|
+ char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
|
|
|
+ char[] tempArr = new char[2];
|
|
|
|
+ tempArr[0] = digit[(mByte >>> 4) & 0X0F];
|
|
|
|
+ tempArr[1] = digit[mByte & 0X0F];
|
|
|
|
+ return new String(tempArr);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|