请给我一段java的微信公众号加签代码,该加签方式中过使用sha1算法
时间: 2024-03-29 19:39:20 浏览: 43
好的,以下是一段使用SHA1算法进行微信公众号消息加签的Java代码:
```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class WeChatSignatureUtil {
// 微信公众号的Token
private static final String TOKEN = "your_wechat_token";
/**
* 验证微信服务器签名
*
* @param signature 微信服务器传来的签名
* @param timestamp 微信服务器传来的时间戳
* @param nonce 微信服务器传来的随机字符串
* @return 验证结果,true为验证通过,false为验证失败
*/
public static boolean checkSignature(String signature, String timestamp, String nonce) {
// 将token、timestamp、nonce三个参数进行字典序排序
String[] arr = new String[]{TOKEN, timestamp, nonce};
Arrays.sort(arr);
// 将三个参数字符串拼接成一个字符串进行sha1加密
StringBuilder sb = new StringBuilder();
for (String s : arr) {
sb.append(s);
}
String temp = getSha1(sb.toString());
// 将加密后的字符串与signature进行对比,判断请求是否来自微信
return temp.equals(signature);
}
/**
* 对字符串进行SHA1加密
*
* @param str 待加密的字符串
* @return 加密后的字符串
*/
private static String getSha1(String str) {
if (str == null || str.length() == 0) {
return null;
}
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(str.getBytes());
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
String hex = Integer.toHexString(b & 0xff);
if (hex.length() == 1) {
sb.append("0");
}
sb.append(hex);
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}
```
这段代码中,我们先定义了一个TOKEN,它是我们在微信公众号后台设置的token值。然后,我们定义了一个checkSignature方法,用于验证从微信服务器传来的消息是否合法。
在checkSignature方法中,我们将token、timestamp、nonce三个参数进行字典序排序,并将排序后的参数拼接成一个字符串进行SHA1加密。最后,将加密后的字符串与微信服务器传来的signature进行对比,判断请求是否来自微信。如果验证通过,则返回true,否则返回false。
而getSha1方法则是用于对字符串进行SHA1加密的方法。
阅读全文