zoukankan      html  css  js  c++  java
  • 生成定长随机数-可做3des密钥

    3DES加解密需要密钥支持,要求为8的倍数,一般会使用32位的字母数字随机字符串作为密钥。

    下面这个工具类,可用做key值的生成,详见下方代码:

    package test;
    
    import java.util.Random;
    
    public class ThreeDes_key {
    
        public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        public static final String LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        public static final String NUMBERCHAR = "0123456789";
    
        /** 
         * 返回一个定长的带因子的固定的随机字符串(只包含大小写字母、数字)
         *  
         * @param length 
         *            随机字符串长度 
         * @return 随机字符串 
         */
        public static String generateStringByKey(int length, int channel) {
            StringBuffer sb = new StringBuffer();
            Random random = new Random(channel);
            for (int i = 0; i < length; i++) {
                sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
            }
            return sb.toString();
        }
    
        /** 
         * 返回一个定长的随机字符串(只包含大小写字母、数字)
         *  
         * @param length 
         *            随机字符串长度 
         * @return 随机字符串 
         */
        public static String generateString(int length) {
            StringBuffer sb = new StringBuffer();
            Random random = new Random();
            for (int i = 0; i < length; i++) {
                sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
            }
            return sb.toString();
        }
    
        /** 
         * 返回一个定长的随机纯字母字符串(只包含大小写字母) 
         *  
         * @param length 
         *            随机字符串长度 
         * @return 随机字符串 
         */
        public static String generateMixString(int length) {
            StringBuffer sb = new StringBuffer();
            Random random = new Random();
            for (int i = 0; i < length; i++) {
                sb.append(ALLCHAR.charAt(random.nextInt(LETTERCHAR.length())));
            }
            return sb.toString();
        }
    
        /** 
         * 返回一个定长的随机纯大写字母字符串(只包含大小写字母) 
         *  
         * @param length 
         *            随机字符串长度 
         * @return 随机字符串 
         */
        public static String generateLowerString(int length) {
            return generateMixString(length).toLowerCase();
        }
    
        /** 
         * 返回一个定长的随机纯小写字母字符串(只包含大小写字母) 
         *  
         * @param length 
         *            随机字符串长度 
         * @return 随机字符串 
         */
        public static String generateUpperString(int length) {
            return generateMixString(length).toUpperCase();
        }
    
        /** 
         * 生成一个定长的纯0字符串 
         *  
         * @param length 
         *            字符串长度 
         * @return 纯0字符串 
         */
        public static String generateZeroString(int length) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < length; i++) {
                sb.append('0');
            }
            return sb.toString();
        }
    
        /** 
         * 根据数字生成一个定长的字符串,长度不够前面补0 
         *  
         * @param num 
         *            数字 
         * @param fixdlenth 
         *            字符串长度 
         * @return 定长的字符串 
         */
        public static String toFixdLengthString(long num, int fixdlenth) {
            StringBuffer sb = new StringBuffer();
            String strNum = String.valueOf(num);
            if (fixdlenth - strNum.length() >= 0) {
                sb.append(generateZeroString(fixdlenth - strNum.length()));
            } else {
                throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异常!");
            }
            sb.append(strNum);
            return sb.toString();
        }
    
        /** 
         * 每次生成的len位数都不相同 
         *  
         * @param param 
         * @return 定长的数字 
         */
        public static int getNotSimple(int[] param, int len) {
            Random rand = new Random();
            for (int i = param.length; i > 1; i--) {
                int index = rand.nextInt(i);
                int tmp = param[index];
                param[index] = param[i - 1];
                param[i - 1] = tmp;
            }
            int result = 0;
            for (int i = 0; i < len; i++) {
                result = result * 10 + param[i];
            }
            return result;
        }
    
        public static void main(String[] args) {
            int channel = 222222;// 测试因子比生产因子少1
            System.out.println("返回一个定长的带因子的固定的随机字符串(只包含大小写字母、数字):" + generateStringByKey(32, channel));
            System.out.println("返回一个定长的随机字符串(只包含大小写字母、数字):" + generateString(32));
            System.out.println("返回一个定长的随机纯字母字符串(只包含大小写字母):" + generateMixString(10));
            System.out.println("返回一个定长的随机纯大写字母字符串(只包含大小写字母):" + generateLowerString(10));
            System.out.println("返回一个定长的随机纯小写字母字符串(只包含大小写字母):" + generateUpperString(10));
            System.out.println("生成一个定长的纯0字符串:" + generateZeroString(10));
            System.out.println("根据数字生成一个定长的字符串,长度不够前面补0:" + toFixdLengthString(123, 10));
            int[] in = { 1, 2, 3, 4, 5, 6, 7 };
            System.out.println("每次生成的len位数都不相同:" + getNotSimple(in, 3));
        }
    }
    

      

  • 相关阅读:
    授权管理-LDAP-介绍与环境搭建
    Gerrit系统框架介绍
    代码托管-gerrit-介绍与环境搭建
    springMVC
    spring,springMVC,mybatis项目添加maven后报500错
    SSM项目引入文件失败
    spring与mybatis整合
    幂等问题本质和业务场景的解决方案
    spring boot logback无感配置
    sentinel与hystrix对比
  • 原文地址:https://www.cnblogs.com/shindo/p/6346673.html
Copyright © 2011-2022 走看看