收藏
回答

小程序检查登录,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



已经卡住一天了,在网上查找大量资料无果,想问问是哪里出错了?

回答关注问题邀请回答
收藏

3 个回答

登录 后发表内容