你好问题解决了吗?怎样解决的。我也遇到一样的问题了。
小程序检查登录,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 已经卡住一天了,在网上查找大量资料无果,想问问是哪里出错了?
04-11