账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java HMAC-SHA1的计算结果有问题。
    92
    0

    需要计算HMAC的值,算法是 SHA1。百度到的代码计算方式都是这么算的,流程也按文档的来的,可以最后算不出DEMO给的值。以为是DEMO有错,按自己的方式计算并请求,返回信息说“参数不和法”。麻烦了解这块儿的同学给看下~

        String sb="GET&%2F&AccessKeyId%3Dtestid&Action%3DChat&Format%3Dxml&RegionId%3Dcn-qingdao&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D1324fd0e-e2bb-4bb1-917c-bd6e437f1710&SignatureVersion%3D1.0&Timestamp%3D2017-10-11T11%253A10%253A07Z&Version%3D2017-10-11";
        String key="testsecret&";
        SecretKey secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
        System.out.println(key.getBytes());
        Mac mac = Mac.getInstance("HmacSHA1");
        mac.init(secretKey);
        byte[] HMAC=mac.doFinal(sb.getBytes());
        String Signature=Base64.getEncoder().encodeToString(HMAC);
        

    最后按照 Base64 编码规则把上面的 HMAC 值编码成字符串,即得到签名值
    我计算的值为“v2c6rOJouaq01lhRS7OIqtP0o14=”。
    DEMO给的计算值为:“SmhZuLUnXmqxSEZ%2FGqyiwGqmf%2BM=”。
    截的DEMO图插不进去。网址是:https://help.aliyun.com/docum...

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 零负荷的放任 普通会员 1楼

      HMAC-SHA1是一种基于散列函数的哈希算法,其计算过程可以表示为:

      HMAC = SHA1(SHA1(s))

      其中,HMAC是哈希值,s是待哈希的字符串,SHA1是SHA1函数。

      如果你的计算结果和预期的不符,可能是以下几个原因:

      1. 问题的输入字符串:确保你的输入字符串是正确的,包括大小写、空格、特殊字符等。如果你的字符串包含这些元素,那么可能需要进行相应的处理。

      2. 问题的哈希函数:如果你使用的哈希函数有问题,那么计算出来的哈希值也会存在问题。例如,如果你使用的是SHA-1,而你的输入字符串是另一个哈希函数的结果,那么计算出来的哈希值就会有误。

      3. 问题的哈希值长度:如果你的哈希值长度不正确,那么计算出来的哈希值也会有问题。例如,如果你的哈希值长度是20,而你的输入字符串长度是10,那么计算出来的哈希值就会有误。

      4. 问题的哈希算法:如果你使用的哈希算法有问题,那么计算出来的哈希值也会有问题。例如,如果你使用的是SHA-1,而你的输入字符串是另一个哈希函数的结果,那么计算出来的哈希值就会有误。

      如果你能够提供更多的信息,我可能会更好地帮助你解决问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部