前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信公众号请求验证加密比对

微信公众号请求验证加密比对

作者头像
用户5899361
发布2020-12-07 15:37:25
7110
发布2020-12-07 15:37:25
举报
文章被收录于专栏:学习java的小白学习java的小白
代码语言:javascript
复制
import org.apache.commons.lang3.StringUtils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
 * @ProjectName: WxTest
 * @Author: huat
 * @Date: 2020/6/18 10:49
 * @Version: 1.0
 */
public class WxService {
    //此处token的值需要和公众号填写的token值一致
    private static final String TOKEN="abcdefg";

    /**
     * 验证请求是否来自微信
     * @param timestamp
     * @param nonce
     * @param echostr
     * @return
     */
    public static boolean check(String timestamp,String nonce,String echostr){
        /**
         * 验证签名步骤
         * 1)将token、timestamp、nonce三个参数进行字典序排序
         * 2)将三个参数字符串拼接成一个字符串进行sha1加密
         * 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
         */
        //第一步声明一个String数组
        String[] strs={TOKEN,timestamp,nonce};
        //第数组中进行排序
        Arrays.sort(strs);
        //第二步拼接字符串,这里使用的commons-lang3包中的方法
        String str=StringUtils.join(strs,"");
        //sha1加密
        String encryption=encryption(str);
        //第三步对比是否一致
        return encryption!=null?echostr.equals(encryption):false;
    }

    /**
     * 进行sha1加密
     * @param str 需要加密的字符串
     * @return
     */
    private static String encryption(String str){

        try {
            //获取加密对象
            MessageDigest messageDigest=MessageDigest.getInstance("sha1");
            //加密字符串
            byte[] bytes=messageDigest.digest(str.getBytes());
            //转位数参照表
            char[] chars= {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
            StringBuilder stringBuilder=new StringBuilder();
            //处理加密结果
            for (byte b:bytes){
                stringBuilder.append(chars[(b>>4)&15]);
                stringBuilder.append(chars[b&15]);
            }
            return stringBuilder.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档