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计算签名错误");
            }
        }
    
    
    }
  • 相关阅读:
    CodeIgniter(3.1.4)框架中成功/错误跳转
    CodeIgniter(3.1.4)框架-url重写,去除index.php
    CodeIgniter(3.1.4)框架中-使用多个公共控制器
    CodeIgniter(3.1.4)框架使用静态文件(js,css)
    PHP无限极分类
    PHP无限极分类
    spring中定时任务quartz2.2.3
    eclipse中git更新操作
    java中日期的换算处理
    使用spring-rabbit测试RabbitMQ消息确认(发送确认,接收确认)
  • 原文地址:https://www.cnblogs.com/ooo0/p/13673907.html
Copyright © 2011-2022 走看看