zoukankan      html  css  js  c++  java
  • SHA1签名工具类

    package richinfo.attendance.util;
    
    import java.security.MessageDigest;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Random;
    import java.util.Set;
    import java.util.SortedMap;
    import java.util.TreeMap;
    
    public class SignatureUtil {
        
        public static final String TOKEN = "3ad8id23i907o2kmli03";//用于生成数字签名
    
        /**
         * 创建SHA1签名
         * @param params
         * @return SHA1签名
         */
        public static String createSignature(SortedMap<String, String> params) {
            return sha1Encrypt(sortParams(params));
        }
        
        /**
         * 创建SHA1签名
         * @param timeStamp
         * @param nonce
         * @return SHA1签名
         */
        public static String createSignature(String timeStamp, String nonce) {
            SortedMap<String, String> signParams = new TreeMap<String, String>();
            signParams.put("token", TOKEN);
            signParams.put("timeStamp", timeStamp);
            signParams.put("nonce", nonce);
            return createSignature(signParams);
        }
    
        /**
         * 使用SHA1算法对字符串进行加密
         * @param str
         * @return
         */
        public static String sha1Encrypt(String str) {
    
            if (str == null || str.length() == 0) {
                return null;
            }
    
            char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                    'a', 'b', 'c', 'd', 'e', 'f' };
    
            try {
    
                MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
                mdTemp.update(str.getBytes("UTF-8"));
    
                byte[] md = mdTemp.digest();
                int j = md.length;
                char buf[] = new char[j * 2];
                int k = 0;
    
                for (int i = 0; i < j; i++) {
                    byte byte0 = md[i];
                    buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                    buf[k++] = hexDigits[byte0 & 0xf];
                }
    
                return new String(buf);
    
            } catch (Exception e) {
                return null;
            }
        }
    
        /**
         * 生成时间戳
         * @return
         */
        public static String getTimeStamp() {
            return String.valueOf(System.currentTimeMillis() / 1000);
        }
    
        /**
         * 生成6位随机字符串
         * @return
         */
        public static String getRandomStr() {
            int length = 6;
            String base = "abcdefghijklmnopqrstuvwxyz0123456789";     
            Random random = new Random();     
            StringBuffer sb = new StringBuffer();     
            for (int i = 0; i < length; i++) {     
                int number = random.nextInt(base.length());     
                sb.append(base.charAt(number));     
            }     
            return sb.toString(); 
        }
        
        /**
         * 根据参数名称对参数进行字典排序
         * @param params
         * @return
         */
        private static String sortParams(SortedMap<String, String> params) {
            StringBuffer sb = new StringBuffer();
            Set<Entry<String, String>> es = params.entrySet();
            Iterator<Entry<String, String>> it = es.iterator();
            while (it.hasNext()) {
                Map.Entry<String, String> entry = it.next();
                String k = entry.getKey();
                String v = entry.getValue();
                sb.append(k + "=" + v + "&");
            }
            return sb.substring(0, sb.lastIndexOf("&"));
        }
    
        public static void main(String[] args) throws Exception {
            //c4db7f5867a6290378cf24429f2803da0516a788
            String timeStamp = getTimeStamp();
            String nonce = getRandomStr();
            String sign = createSignature(timeStamp, nonce);
            System.out.println("timeStamp:"+timeStamp);
            System.out.println("nonce:"+nonce);
            System.out.println("signature:" + sign);
        }
    
    }
  • 相关阅读:
    具有包含性列的索引
    SQLServer性能调优3之索引(Index)的维护
    千万级SQL Server数据库表分区的实现
    SQL Server表分区
    SQL Server 索引中include的魅力(具有包含性列的索引)
    Sql Server 性能优化之包含列
    SQL Server索引进阶第五篇:索引包含列 .
    spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable
    spring mvc传入参数不仅仅转换为json,还可以直接将json字符串转换为具体的java对象
    只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/9167228.html
Copyright © 2011-2022 走看看