安全加密算法AES工具类 import java.security.SecureRandom;import javax.crypto.*;import javax.crypto.spec.SecretKeySpec;public class SecurityCoderUtils { public SecurityCoderUtils() { } /** * AES 加密 * * @param inStr 需要加密的字
import java.security.SecureRandom; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; public class SecurityCoderUtils { public SecurityCoderUtils() { } /** * AES 加密 * * @param inStr 需要加密的字符串 * @param encryptKey 密钥字符串 * @return 二进制 * @throws Exception */ private static byte[] encrypt(String inStr, String encryptKey) throws Exception { SecretKeySpec key = new SecretKeySpec(enCodeFormat(encryptKey), "AES"); //Cipher:加密或解密工作类 Cipher cipher = Cipher.getInstance("AES"); //对Cipher初始化,加密模式 cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(inStr.getBytes("UTF-8")); } /** * AES 解密 * * @param inByte 二进制 * @param encryptKey 密钥字符串 * @return * @throws Exception */ private static String decrypt(byte[] inByte, String encryptKey) throws Exception { SecretKeySpec key = new SecretKeySpec(enCodeFormat(encryptKey), "AES"); //Cipher:加密或解密工作类 Cipher cipher = Cipher.getInstance("AES"); //对Cipher初始化,解密模式 cipher.init(Cipher.DECRYPT_MODE, key); return new String(cipher.doFinal(inByte), "UTF-8"); } /** * @param encryptKey 密钥字符串 * @return 密钥字节数组 * @throws Exception */ private static byte[] enCodeFormat(String encryptKey) throws Exception { //密钥生成器 KeyGenerator keyGen = KeyGenerator.getInstance("AES"); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(encryptKey.getBytes("UTF-8")); //默认128,获得无政策权限后可为192或256 keyGen.init(128, secureRandom); //生成密钥 SecretKey secretKey = keyGen.generateKey(); //返回密钥字节数组 return secretKey.getEncoded(); } /** * AES 加密 * * @param inStr 需要加密的字符串 * @return 十六进制 * @throws Exception */ public static String encryptHexString(String inStr) throws Exception { return parseByte2HexString(encrypt(inStr, "06A3547EB3716D1F97946795500E6AAA")); } /** * AES 加密 * * @param inStr 需要加密的字符串 * @param encryptKey 密钥字符串 * @return 十六进制 * @throws Exception */ public static String encryptHexString(String inStr, String encryptKey) throws Exception { return parseByte2HexString(encrypt(inStr, encryptKey)); } /** * AES 解密 * * @param hexStr 十六进制 * @return */ public static String decryptHexString(String hexStr) throws Exception { return decrypt(parseHexStr2Byte(hexStr), "06A3547EB3716D1F97946795500E6AAA"); } /** * AES 解密 * * @param hexStr 十六进制 * @param encryptKey * @return */ public static String decryptHexString(String hexStr, String encryptKey) throws Exception { return decrypt(parseHexStr2Byte(hexStr), encryptKey); } /** * 将二进制转换成十六进制 * * @param buffer * @return */ private static String parseByte2HexString(byte buffer[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < buffer.length; i++) { String hex = Integer.toHexString(buffer[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex.toUpperCase()); } return sb.toString(); } /** * 将十六进制转换为二进制 * * @param hexStr * @return */ private static byte[] parseHexStr2Byte(String hexStr) { if (hexStr.length() < 1) { return null; } byte[] result = new byte[hexStr.length() / 2]; for (int i = 0; i < hexStr.length() / 2; i++) { int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); result[i] = (byte) (high * 16 + low); } return result; } /** * 随机生成密钥 */ private static String generateKey() throws Exception { //密钥生成器 KeyGenerator keyGen = KeyGenerator.getInstance("AES"); //默认128,获得无政策权限后可为192或256 keyGen.init(128); //生成密钥 SecretKey secretKey = keyGen.generateKey(); //密钥字节数组 byte[] key = secretKey.getEncoded(); return parseByte2HexString(key); } // public static void main(String args[]) throws Exception { // String str = String.format("%016d", 100); // //System.out.println("随机生成密钥:" + generateKey()); // System.out.println("原始:" + str); // System.out.println("AES加密后:" + encryptHexString(str)); // System.out.println("AES解密后:" + decryptHexString(encryptHexString(str))); // System.out.println("AES加密后:" + encryptHexString(str, // "06A3547EB3716D1F97946795500E6AAA")); // System.out.println("AES解密后:" + decryptHexString(encryptHexString(str), // "06A3547EB3716D1F97946795500E6AAA")); // } }