zoukankan      html  css  js  c++  java
  • 企业微信-签名算法

    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计算签名错误");
            }
        }
    
    
    }
  • 相关阅读:
    安装64位Oracle 10g超详细教程
    Linux同平台Oracle数据库整体物理迁移
    Oracle 删除重复数据只留一条
    linux下通过脚本实现自动重启程序的方法
    Linux查看系统开机时间
    Linux下oracle数据库启动和关闭操作
    curl: (6) Couldn’t resolve host ‘www.ttlsa.com’
    linux 怎么查找oracle11g的安装目录
    Linux系统管理员:不要害怕升级内核
    The Binder Architecture
  • 原文地址:https://www.cnblogs.com/ooo0/p/13673907.html
Copyright © 2011-2022 走看看