微信小程序 java通过 rawData 和 session_key 生成 signature 签名

做微信小程序时,我们需要用户授权登录获取用户的相关数据,如果涉及到隐私数据,需要服务端通过rawData 和 session_key 生成 signature 签名,从而校验数据的准确性

public static String getsignature2(String rawData, String sessionKey) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        String stringASCII = rawData + sessionKey;
        String signature2 = null;
        try {
            //指定sha1算法
            MessageDigest digest = MessageDigest.getInstance("SHA-1");
            digest.update(stringASCII.getBytes("UTF-8"));
            //获取字节数组
            byte messageDigest[] = digest.digest();
            // 创建 Hex 字符串
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
                signature2 = hexString.toString().toLowerCase();
            }
        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
           throw e;
        }
        return signature2;
    }

上述代码就实现了这个过程,其中有个坑,digest.update(stringASCII.getBytes("UTF-8")); 该行代码我们指定了编码格式,这在idea上面运行是没有问题的,因为idea的编码格式我们平时也是指定的utf-8,但是当项目部署到tomcat上后,会出现获取到的 signature 和前端传过来的 signature 不一致,导致数据检验不通过,原因就是tomcat默认的编码格式是GBK,我们需要手动更改tomcat的编码格式

打开tomcat里conf 下 的server.xml文件,在 下面图中的位置添加 URIEncoding="UTF-8" 编码格式即可

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值