• 企业微信-签名算法


    package com.xc.xcspringboot.demo;
    
    import java.nio.charset.StandardCharsets;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Formatter;
    
    /**
     * https://work.weixin.qq.com/api/doc/90000/90136/90506
     *
     * @author tl19638
     * @date 2020/8/18
     */
    public class 签名算法 {
    
        public static void main(String[] args) throws Exception {
            String genNonce = genNonce();
            System.out.println("noncestr:" + genNonce);
    
            long timestamp = System.currentTimeMillis() / 1000;
            System.out.println("timestamp:" + timestamp);
    
            String sign = sign("https://www.sogou.com", genNonce, timestamp, "eaed581b260d754b1adf54d7875adc27");
            System.out.println("sign:" + sign);
        }
    
    
        /**
         * 模拟生成随机 nonce 字符串
         *
         * @return 随机字符串
         */
        private static String genNonce() {
            return bytesToHex(Long.toString(System.nanoTime()).getBytes(StandardCharsets.UTF_8));
        }
    
        private static String bytesToHex(final byte[] hash) {
            Formatter formatter = new Formatter();
            for (byte b : hash) {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            formatter.close();
            return result;
        }
    
        private static String sign(String url, String nonce, Long timestamp, String ticket) throws Exception {
            String plain = String.format("jsapi_ticket=%s&noncestr=%s&timestamp=%d&url=%s", ticket, nonce, timestamp, url);
            System.out.println("plain:" + plain);
            try {
                MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
                sha1.reset();
                sha1.update(plain.getBytes(StandardCharsets.UTF_8));
                return bytesToHex(sha1.digest());
            } catch (NoSuchAlgorithmException e) {
                // throw new LeysenException("jsapi_ticket计算签名错误");
                throw new Exception("jsapi_ticket计算签名错误");
            }
        }
    
    
    }
  • 相关阅读:
    CI 知识 :Git介绍及常用操作
    虚拟机的迁移(热迁移)
    kvm虚拟化网络管理
    Zabbix -----安装
    Mariadb 主从
    keepalived + lvs marster 与 backup 之间的 高可用
    LVS 负载均衡 (VS/DR模式 与 VS/TUN 模式)
    linux下部署tomcat 上线jpress博客系统
    docker (2)---存储、网络(利用docker容器上线静态网站)
    openstack(2) -------RabbitMQ集群部署
  • 原文地址:https://www.cnblogs.com/ooo0/p/13673907.html
Copyright © 2020-2023  润新知