package com.demo.util; import org.springframework.util.StringUtils; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.security.SecureRandom; import java.util.Date; import java.util.Random; public class SecretUtil { public static final String KEY_ALGORITHM = "AES"; /** * 生成AES密钥 * * @param length 长度 * @param password 密钥种子(指定的字符串 ---/ 可以为空 / ---) * @return * @throws Exception */ public static String generateAesKey(int length, String password) throws Exception { //实例化 KeyGenerator kgen = null; kgen = KeyGenerator.getInstance(KEY_ALGORITHM); //设置密钥长度 if(StringUtils.isEmpty(password)){ kgen.init(length); }else{ //SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以生成的秘钥就一样。 kgen.init(length, new SecureRandom(password.getBytes())); } //生成密钥 SecretKey skey = kgen.generateKey(); //返回密钥的二进制编码 byte[] skeyByte = skey.getEncoded(); return byteToHexString(skeyByte); } /** * byte数组转化为16进制字符串 * @param bytes * @return */ public static String byteToHexString(byte[] bytes){ StringBuffer sb = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { String strHex=Integer.toHexString(bytes[i]); if(strHex.length() > 3){ sb.append(strHex.substring(6)); } else { if(strHex.length() < 2){ sb.append("0" + strHex); } else { sb.append(strHex); } } } return sb.toString(); } /** * 生成随机的子节数 * @param len * @return */ public static String getRandNum(int len) { StringBuffer flag = new StringBuffer(); String sources = new Date().getTime() +""; // 加上一些字母,就可以生成pc站的验证码了 Random rand = new Random(); for (int j = 0; j < len; j++) { flag.append(sources.charAt(rand.nextInt(9)) + ""); } return flag.toString(); } // public static void main(String args[]) throws Exception{ // //// System.out.println( getRandNum(6)); // System.out.println(generateAesKey(128,"reyun")); // // } }