小程序检查登录,hmac_sha256(session_key, ""),java加密一直失败?
因为业务需求,需要对校验服务器所保存的登录态 session_key 是否合法。所以需要调用checkSessionKey,但是一直检验失败 接口文档地址:小程序登录 / 检验登录态 (qq.com) [图片] 使用了网上的hmac_sha256无法正确校验,一直返回 { "errcode": 87009, "errmsg": "invalid signature rid: 65e97785-265f7134-5e01ae56" } 我是这样请求的: [图片] 已经反复核对请求参数,其他三个参数应该是没有问题的,但是一直给我报87009错误。 Java代码hmac_sha256算法如下:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class SignatureUtil {
public static String sign(String secretKey, String message) throws NoSuchAlgorithmException, InvalidKeyException {
// 使用 HMAC-SHA256 算法
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
// 密钥规格
SecretKeySpec secret_key = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
// 初始化 Mac 实例
sha256_HMAC.init(secret_key);
// 对消息进行签名
byte[] array = sha256_HMAC.doFinal(message.getBytes(StandardCharsets.UTF_8));
// 将签名转换为十六进制字符串
StringBuilder sb = new StringBuilder();
for (byte b : array) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static void main(String[] args) {
try {
String sessionKey = "tBW1cE************bg=="; // 你的session_key
String message = ""; // 要签名的空字符串
String signature = sign(sessionKey, message);
System.out.println("Signature: " + signature);
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果如下:
Signature: 9fb498ec88e4ff180db55f********42c8b899c0ddc438903042eaab04fcb20a6
Process finished with exit code 0
已经卡住一天了,在网上查找大量资料无果,想问问是哪里出错了?