update 使用hutool.crypto替换javax.crypto

This commit is contained in:
bleachtred 2024-02-19 09:02:50 +08:00
parent aa51489624
commit a68734bf62
4 changed files with 24 additions and 42 deletions

View File

@ -52,6 +52,11 @@
<artifactId>spring-boot-starter</artifactId> <artifactId>spring-boot-starter</artifactId>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-crypto</artifactId>
</dependency>
</dependencies> </dependencies>

View File

@ -1,22 +1,19 @@
package org.dromara.oa.core.byteTalk.utils; package org.dromara.oa.core.byteTalk.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.oa.comm.entity.Request; import org.dromara.oa.comm.entity.Request;
import org.dromara.oa.comm.enums.MessageType; import org.dromara.oa.comm.enums.MessageType;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import static org.dromara.oa.comm.enums.MessageType.BYTETALK_TEXT; import static org.dromara.oa.comm.enums.MessageType.BYTETALK_TEXT;
/** /**
* 飞书通知签名和信息构建 * 飞书通知签名和信息构建
* @author dongfeng * @author dongfeng
@ -29,15 +26,9 @@ public class ByteTalkBuilder {
//把timestamp+"\n"+密钥当做签名字符串 //把timestamp+"\n"+密钥当做签名字符串
String stringToSign = timestamp + "\n" + secret; String stringToSign = timestamp + "\n" + secret;
//使用HmacSHA256算法计算签名 //使用HmacSHA256算法计算签名
Mac mac = null; HMac mac = new HMac(HmacAlgorithm.HmacSHA256, stringToSign.getBytes(StandardCharsets.UTF_8));
try { byte[] signData = mac.digest(new byte[]{});
mac = Mac.getInstance("HmacSHA256"); return Base64.encode(signData);
mac.init(new SecretKeySpec(stringToSign.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException(e);
}
byte[] signData = mac.doFinal(new byte[]{});
return new String(Base64.getEncoder().encode(signData));
} }

View File

@ -1,19 +1,17 @@
package org.dromara.oa.core.dingTalk.utils; package org.dromara.oa.core.dingTalk.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.oa.comm.entity.Request; import org.dromara.oa.comm.entity.Request;
import org.dromara.oa.comm.enums.MessageType; import org.dromara.oa.comm.enums.MessageType;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -32,17 +30,11 @@ public class DingTalkBuilder {
Long timestamp = System.currentTimeMillis(); Long timestamp = System.currentTimeMillis();
String stringToSign = timestamp + "\n" + secret; String stringToSign = timestamp + "\n" + secret;
Mac mac = null; HMac mac = new HMac(HmacAlgorithm.HmacSHA256, secret.getBytes(StandardCharsets.UTF_8));
byte[] signData = mac.digest(stringToSign.getBytes(StandardCharsets.UTF_8));
String sign;
try { try {
mac = Mac.getInstance("HmacSHA256"); sign = URLEncoder.encode(Base64.encode(signData), StandardCharsets.UTF_8.toString());
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException(e);
}
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
String sign = null;
try {
sign = URLEncoder.encode(new String(Base64.getEncoder().encode(signData)), StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,6 +1,8 @@
package org.dromara.sms4j.qiniu.util; package org.dromara.sms4j.qiniu.util;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -8,8 +10,6 @@ import org.dromara.sms4j.comm.constant.Constant;
import org.dromara.sms4j.comm.exception.SmsBlendException; import org.dromara.sms4j.comm.exception.SmsBlendException;
import org.dromara.sms4j.qiniu.config.QiNiuConfig; import org.dromara.sms4j.qiniu.config.QiNiuConfig;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URI; import java.net.URI;
@ -19,8 +19,6 @@ import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import static org.apache.commons.codec.digest.HmacUtils.hmacSha1;
/** /**
* @author Administrator * @author Administrator
* @Date: 2024/1/30 16:37 50 * @Date: 2024/1/30 16:37 50
@ -43,19 +41,15 @@ public class QiNiuUtils {
if (ObjectUtil.isNotEmpty(body)) { if (ObjectUtil.isNotEmpty(body)) {
dataToSign.append(body); dataToSign.append(body);
} }
Mac sha1Mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); HMac hMac = new HMac(HmacAlgorithm.HmacSHA1, qiNiuConfig.getAccessKeySecret().getBytes(StandardCharsets.UTF_8));
SecretKeySpec secretKeySpec = new SecretKeySpec(qiNiuConfig.getAccessKeySecret().getBytes(StandardCharsets.UTF_8), HMAC_SHA1_ALGORITHM); byte[] signData = hMac.digest(dataToSign.toString().getBytes(StandardCharsets.UTF_8));
sha1Mac.init(secretKeySpec);
byte[] signData = sha1Mac.doFinal(dataToSign.toString().getBytes(StandardCharsets.UTF_8));
String encodedSignature = Base64.getEncoder().encodeToString(signData); String encodedSignature = Base64.getEncoder().encodeToString(signData);
System.out.println("encodedSignature = " + encodedSignature);
return "Qiniu " + qiNiuConfig.getAccessKeyId() + ":" + encodedSignature; return "Qiniu " + qiNiuConfig.getAccessKeyId() + ":" + encodedSignature;
} }
public static Map<String, String> getHeaderAndSign(String url, HashMap<String, Object> hashMap, QiNiuConfig qiNiuConfig) { public static Map<String, String> getHeaderAndSign(String url, HashMap<String, Object> hashMap, QiNiuConfig qiNiuConfig) {
String signature = null; String signature;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String signDate = dateFormat.format(new Date()); String signDate = dateFormat.format(new Date());
@ -67,7 +61,7 @@ public class QiNiuUtils {
} }
//请求头 //请求头
Map<String, String> header = new HashMap<>(); Map<String, String> header = new HashMap<>(3);
header.put("Authorization", signature); header.put("Authorization", signature);
header.put("X-Qiniu-Date", signDate); header.put("X-Qiniu-Date", signDate);
header.put("Content-Type", "application/json"); header.put("Content-Type", "application/json");